我想知道如果有两个括号(开始和结束),我怎么才能匹配文字。
目前,我的RegExp是:^1?\s?\(?\d{3}\)?[-\s]?\d{3}[-\s]?\d{4}$
。
它会检查美国有效数字,但\(?
和\)?
会产生差异。如果文本中有0或2,则应与文本匹配。
一些测试:
1 555)555-5555 - false
555)-555-5555 - false
(555-555-5555 - false
现在,他们都返回相同的结果 - true 。
以下是指向它的链接:
https://regexr.com/3kjei(^
是因为我必须只选择一个没有任何换行符的字符串,请从中删除2个其他字符串,这样你就可以看到它返回true。此链接中的所有字符串都应该返回< strong> true ,只需检查它,因此文本编辑器中只有一个字符串。)
谢谢
答案 0 :(得分:1)
您可以使用
^(?:1\s?)?(?:\(\d{3}\)|\d{3})[-\s]?\d{3}[-\s]?\d{4}$
请参阅regex demo。
请注意,正则表达式中的^1?\s?
在开头允许一个空格,这就是我建议^(?:1\s?)?
- 一个以1
开头的可选序列,可选地跟随空格。< / p>
\(?\d{3}\)?
部分已替换为(?:\(\d{3}\)|\d{3})
- non-capturing group,其匹配(
+ 3位+ )
或3位数(因此,不是{{} 1}}或123)`可以匹配)。
<强>详情
(123
- 字符串开头^
- (?:1\s?)?
出现1次或0次,可选地后跟1个空白字符1
- (?:\(\d{3}\)|\d{3})
,3位数,(
或仅3位)
- 可选的[-\s]?
或空白-
- 3位数\d{3}
- 可选的[-\s]?
或空白-
- 4位数\d{4}
- 字符串结束。答案 1 :(得分:1)
为什么不在你的正则表达式中\(?\d{3}\)?
表示你&#34;或&#34;相反。
例如。替换为这样的东西:
((\(\d{3}\))|\d{3})