我正在学习RegEx,我陷入了以下的练习:
我必须匹配:
1 (555) 555-5555
5555555555
1 555-555-5555
555-555-5555
而不是:
1 555)555-5555
(6505552368)
10 (757) 622-7382
555)-555-5555
我的表达(不工作)是:
/([0-9]? ?)?(([0-9]{3})|(\([0-9]{3}\)))( |\-)?\2\5?\2[0-9]/ig
你能帮帮我吗?我无法弄清楚出了什么问题......
答案 0 :(得分:1)
你可以提出:
^\d\ *(?:\(\d+\))?[- \d]+$
细分:
^ - an anchor to bind the expression to the beginning of the line
\d - one digit of 0-9
\ * - zero or more spaces
(?:\(\d+\))? - digits in parentheses, made optional
[- \d]+ - characters from the specified class
$ - bind the expression to the end
但引用regex
标记:
由于正则表达式没有完全标准化,所有问题 使用此标记还应包含指定适用的标记 编程语言或工具。
请更新您的问题并应用使用的编程语言。
正如@Aminah指出的那样,给定的正则表达式存在缺陷,可以通过使用前瞻来避免,例如:
^(?!.*-{2,})\d\ *(?:\(\d+\))?[- \d]+$
(?!.*-{2,})
确保没有两个结果斜杠允许。
答案 1 :(得分:1)
您可以使用:
/^(\d? ?)?(\d{3}|\(\d{3}\))[ -]?\d{3}[ -]?\d+$/gm
^(\d? ?)?
:^
匹配字符串的开头。 \d
等于[0-9]
(\d{3}|\(\d{3}\))
:匹配括号为可选的第二组。你是对的,但你放了太多不必要的括号。[ -]?
:它等于( |-)?
\d+$
:$
用于字符串的结尾。/gm
:m
标志用于多行答案 2 :(得分:1)
好的,这个有点棘手,实际测试。
你走了:
^(\d\s?(?:\(\d{3}\))?\s?[\d|\-]{8,12})$
这个只捕获完整的数字并返回完整的数字,而不是其他答案中提到的其他部分。
在这里测试: