/^(18[0-9]{9})|(15[0-9]{9})$/
这条正则为什么能匹配 18444444444444444444
,我对这条正则的理解是 以 18 或 15 开头后接9位 0-9 的数字。
注:我知道手机号码的正则有其他的写法,只是想弄懂为什么这条可以匹配的原因。
/^(18[0-9]{9})|(15[0-9]{9})$/
这条正则为什么能匹配 18444444444444444444
,我对这条正则的理解是 以 18 或 15 开头后接9位 0-9 的数字。
注:我知道手机号码的正则有其他的写法,只是想弄懂为什么这条可以匹配的原因。
^(18[0-9]{9})|(15[0-9]{9})$
你这种写法,相当于
^(18[0-9]{9})
或
(15[0-9]{9})$
也就是优先级问题,你需要加上个括号,如下:
^((18[0-9]{9})|(15[0-9]{9}))$
其实这个js库就有校验手机号码的API了,提供参考bee.js
/^(18[0-9]{9})|(15[0-9]{9})$/
首先你要明白你写的这条正则代表什么意思:
^(18[0-9]{9})或者(15[0-9]{9})$就匹配
翻译过来就是:
(18和9个十进制数开头)或者(15和9个十进制结尾)就匹配
然后你给的数据是这样的:
18444444444444444444
既然是或语句,这符合18和9个十进制数开头所以自然就匹配啦
可以改成这样/^(18[0-9]{9})$|^(15[0-9]{9})$/就符合你要的手机匹配
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
这个表达式相当于:
是因为 ^ 和 $ 的优先级比 | 高,所以 ^ 先与 18[0-9]{9} 匹配了