js 正则验证手机号,有点疑问?

  // 验证手机号
    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;
    }

这部分不太懂什么意思:
**
clipboard.png
**

阅读 4.4k
9 个回答

把多余逗号去掉!
(14[47])|(15[^4\D])


(15[^4\D])
[^4\D] 这个写法,\D表示 非数字,[^\D]表示 非非数字,等价于[\d]

等价写法:(15[0-35-9])


chrome console 测试:

s='153,154,155,15a,15,'
"153,154,155,15a,15,"
ptn1=/15[^4\D]/g;
/15[^4\D]/g
s.match(ptn1)
["153", "155"]
ptn2=/15[^\D4]/g;
/15[^\D4]/g
s.match(ptn2)
["153", "155"]
ptn3=/15[0-35-9]/g;
/15[0-35-9]/g
s.match(ptn3)
["153", "155"]

经测,[^4\D][^\D4][0-35-9],这3种写法是等价的。
[^4\D]会把 [^\D] 当作 [\d] 展开,然后把 4 从中剔除;最后变成[0-35-9]

我觉得上面的两个答案有点不严谨呢?

/14[4,7]/.test("144") //true
/14[4,7]/.test("147") //true
/14[4,7]/.test("14,") //true

不懂在[]可选字符组(集)里用了逗号,总觉得这里应该是[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的号段...

var phoneRegExp = /^(13\d|14[57]|15[^4\D]|17[0135-8]|18\d)\d{8}$/;

手机号:(移动-电信-联通)

    

var tel = $("#PhoneNumber").val();//获取输入的手机号

    var yidongreg = /^(134[012345678]\d{7}|1[34578][012356789]\d{8})$/;

    var dianxinreg = /^1[3578][01379]\d{8}$/;
    var liantongreg = /^1[34578][01256]\d{8}$/;
    //var reg = /^1[3|4|5|7|8]\d{9}$/;//这一种也可以
    if (yidongreg.test(tel) || dianxinreg.test(tel) || liantongreg.test(tel)){

    }

/^((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"+紧接以非数字字符开头两个范围匹配字符,^表示作为开头标识

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题