Javascript 理解区号电话的RegExp
我正试图了解更多关于RegExp的电话号码,尤其是区号。通常,区号是这样的:Javascript 理解区号电话的RegExp,javascript,regex,Javascript,Regex,我正试图了解更多关于RegExp的电话号码,尤其是区号。通常,区号是这样的: (345)或345中的RegExp代码为: ^(\()?\d{3}(\))?$ 但是有没有办法确保如果键入了(345或345),那么它将不返回匹配或false 我能理解的是: ^$-是字符串的开头和结尾 ()-是第一个捕获的组 \(-在第一个捕获的组中找到,并在字符串中查找“(” ?-我不确定这是什么,但我认为它标志着第一个捕获组的结束 \d{3}-查找数字(数字),但按3位的顺序查找 (\)-第二个捕获组并在字符
(345)
或345
中的RegExp代码为:
^(\()?\d{3}(\))?$
但是有没有办法确保如果键入了(345
或345)
,那么它将不返回匹配或false
我能理解的是:
^$代码>-是字符串的开头和结尾
-是第一个捕获的组()
-在第一个捕获的组中找到,并在字符串中查找“(”\(
-我不确定这是什么,但我认为它标志着第一个捕获组的结束?
-查找数字(数字),但按3位的顺序查找\d{3}
-第二个捕获组并在字符串中查找“)”(\)
总之,我要求解释
?
,以及在测试(345
或345)
时如何不返回匹配。除了字符?
未用于标记捕获组的结束外,您对所有内容都是正确的。它实际上是一个特殊的量词字符,表示捕获组(\()
必须匹配零个或多个字符
解决括号问题的最佳方法是使用Tom建议的或运算符
例如:
^(\(\d{3}\)|\d{3})$
这将在两个表达式中查找匹配项,以便您可以确保包含两个括号或没有括号。除了字符?
不用于标记捕获组的结尾之外,其他所有内容都是正确的。它实际上是一个特殊的量词字符,表示捕获组(\()
必须匹配零个或多个字符
解决括号问题的最佳方法是使用Tom建议的或运算符
例如:
^(\(\d{3}\)|\d{3})$
这将在这两个表达式中查找匹配项,以便您可以确保包含两个括号或没有括号。不是最优雅的,只是将两个正则表达式组合在一起
^(\(\d{3}\))$|^(\d{3})$
不是最优雅的,只是结合了两个正则表达式
^(\(\d{3}\))$|^(\d{3})$
下面是一个可能的解决方案
简单的正则表达式来测试包装在a()中的3个数字,如果删除其中一个braket,代码返回false
var str = "(345)"
var patt = /^\(\d{3}\)$/g;
var result = patt.test(str);
console.info(res)
下面是一个可能的解决方案
简单的正则表达式来测试包装在a()中的3个数字,如果删除其中一个braket,代码返回false
var str = "(345)"
var patt = /^\(\d{3}\)$/g;
var result = patt.test(str);
console.info(res)
?
使regex中的前一个标记成为可选标记。
您应该将其取出以强制插入括号,但由于您还需要匹配不带括号的区号,因此可以使用|
指定OR大小写
生成的正则表达式如下所示
^(\()\d{3}(\)\d{3})$
如果您不需要捕捉括号本身,则可以将其简化为:
^(\(\d{3}\)\d{3})$
let r=/^(\(\d{3}\)\d{3})$/
console.log(r.test('555'))//true
console.log(r.test('(555)')//true
console.log(r.test('(555'))//false
console.log(r.test('555')//false
这个?
使得regex中的前一个标记是可选的。
您应该将其取出以强制插入括号,但由于您还需要匹配不带括号的区号,因此可以使用|
指定OR大小写
生成的正则表达式如下所示
^(\()\d{3}(\)\d{3})$
如果您不需要捕捉括号本身,则可以将其简化为:
^(\(\d{3}\)\d{3})$
let r=/^(\(\d{3}\)\d{3})$/
console.log(r.test('555'))//true
console.log(r.test('(555)')//true
console.log(r.test('(555'))//false
console.log(r.test('555')//false
?-表示前一个符号不是必须的?
表示“零或前一个标记之一”。因此(\()?
将匹配”(“
)或”
(一个空字符串)。我明白了!非常感谢!为什么不这样做:^(\(\d{3})\d{3})$
--这是说:“ddd”或“ddd”
(其中d
是任何数字)。是否有任何特殊原因需要捕获括号??-表示上一个符号不是必须的?
表示“零或上一个标记之一”。因此(\()?
将匹配”(
)或”
(空字符串)。我明白了!非常感谢!为什么不直接这样做:^(\(\d{3}\)\d{3})$
——这是说:“(ddd)”或“ddd”
(其中d
是任意数字)。有什么特别的原因需要捕获括号吗?问题不是阻止345
上的匹配!!而是强制使用2个括号或0个括号,而不是1个括号。嗯…345
只是我键入的随机数。因此,我必须将345
替换为\d{3},对吗?@KristinaBressler不,我误解了。如果你用\d{3}
替换345
,你将无法匹配任何3个数字组合。我想你最好的办法是按照汤姆的建议使用或运算符:^(\(\d{3})\d{3})$
问题不在于防止在345
上进行匹配!!问题在于强制使用2个括号或0个括号,而不是1个括号。嗯…345
只是我键入的随机数。因此,我必须将345
替换为\d{3},对吗?@KristinaBressler不,我误解了。如果你用\d{3}
替换345
,你将无法匹配任何3个数字组合。我想你最好的办法是按照汤姆的建议使用或运算符:^(\(\d{3})\d{3})$
你通过FreeCodeCamp了吗?我还没有看过这个挑战,所以我不知道它是否满足要求。这只是一个使用regex检测电话号码的基本方法的示例,但你可能还有很多东西可以合作