Regex 为什么这个正则表达式允许星号通过?
我需要做一个奇怪的电话验证。下面的模式对于我需要验证的规则非常有效,但由于某些原因,星号被允许通过Regex 为什么这个正则表达式允许星号通过?,regex,Regex,我需要做一个奇怪的电话验证。下面的模式对于我需要验证的规则非常有效,但由于某些原因,星号被允许通过 ^(?=.{10,15}$)[\(\)-. ]*?([0-9]{3})[\(\)-. ]*?([0-9]{3})[\(\)-. ]*?([0-9]{4}) 我一直在使用此网站测试我的表达: 以下是我需要传递的值: (501)5551234 (501)-555.1234 501-555-1234 501.555.1234 501 555 1234 501)343-2233 (501 343-22
^(?=.{10,15}$)[\(\)-. ]*?([0-9]{3})[\(\)-. ]*?([0-9]{3})[\(\)-. ]*?([0-9]{4})
我一直在使用此网站测试我的表达:
以下是我需要传递的值:
- (501)5551234
- (501)-555.1234
- 501-555-1234
- 501.555.1234
- 501 555 1234
- 501)343-2233
- (501 343-2233)
- (501.343-2233)
- 5013432233
- 800-…555-1234
- -(.8005551234)
- *-(.8005551234)
- 501*555-1234
- -(.80055512 41)
- 501_555_1234
- 555-1234
- 800-555-1234
- 013432233
\)-。
相当于)*+,-。
如何优化此正则表达式
我想你的意思是“简化”。我可以看到序列[\(\)-.]*?([0-9]{3})
重复了三次,所以如果你不喜欢匹配的组,那么我宁愿使用
^(?=.{10,15}$)([\(\)\-. ]*?[0-9]{3}){3}[0-9]
您还可以将
[0-9]
缩短为\d
以下是优化的正则表达式:^(?=.{10,15}$(?=.*((?=(::..[0-9]){10}.$([()\s.-]*[0-9]{3}[()\s.-]*[0-9]{3}[()\s.-]*[0-9]{4}$
或者更简单一些:^(?=.{10,15}$)(?:[()\s.-]*[0-9]{3}){3}[0-9]$
不要忘记锚点(^
行开始和$
行结束),并使用多行选项。在JavaScript中,它将是/m
:/^(?=.{10,15}$)(?:[()\s.-]*[0-9]{3}{3}[0-9]$/m
这是。1.避开方括号内的破折号:
-
->\-
。就是这样@idleherb。非常感谢!感谢您花时间回答并解释如何使星号不合格,但您发布的正则表达式似乎对我不起作用。@Bazinga:是的。什么不起作用,什么正则表达式味道/l你在用什么语言?现在看起来不错。我之前复制了它,得到了一个奇怪的位置“(“@Bazinga:哦,对了,我还在编辑宽限期内修复了它。没想到有人会注意到:-)