// 验证手机号
var verifyTel = function(tel) {
if(tel.match(/^((13[0-9])|(14[4,7])|(15[^4,\D])|(17[6-8])|(18[0-9]))(\d{8})$/)) {
return true;
} else
return false;
}
这部分不太懂什么意思:
**
**
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
把多余逗号去掉!
(14[47])|(15[^4\D])(15[^4\D])[^4\D] 这个写法,\D表示
非数字,[^\D]表示非非数字,等价于[\d]等价写法:
(15[0-35-9])chrome console 测试:
经测,
[^4\D]、[^\D4]和[0-35-9],这3种写法是等价的。[^4\D]会把 [^\D] 当作 [\d] 展开,然后把 4 从中剔除;最后变成[0-35-9]。我觉得上面的两个答案有点不严谨呢?
不懂在
[]可选字符组(集)里用了逗号,总觉得这里应该是[4-7]的意图(我猜的第二个是
15[^4,D]在[]取的反义,即不能是4,,和\D(不是数字的情况),概况起来就是说在
15后要匹配到的为 不能 不是数字,不能是逗号,不是4,就是从0-9中排除4,我觉得
15[^4,\D]和15[^4\D]效果是一样的。14[4,7] 表示匹配 144 或者 147
15[^4,D] 表示匹配 除了 154 外的所有 15 开头的三位数
匹配144和147
第二个是除了154 15加其他的三位都匹配
这是我写的手机号校验正则,应该是把目前有的手机号都囊括了,话说没有144的号段...
手机号:(移动-电信-联通)
/^((13|8)|14[5|7]|15[0-3|5-9]|17[3|6-8])d{8}$/
这段写得不好,加那么多括号干嘛,你又不用分组,[4,6] 和 [46]一个意思,手机号码这种直接上网找就好了,自己写就是作,还容易出事
(14[4, 7]) :以"144"或"147"两个范围匹配字符,中括号表示为取值范围;
(15[ ^4, D]) : 以"154"或"15"+紧接以非数字字符开头两个范围匹配字符,^表示作为开头标识
。