一个javascript正则匹配,同时匹配身份证和手机号码

需要匹配的字符串 "[981222123412306728] TEL[13388888888]"
后面的手机号码,有可能有,有可能没有,应该怎么写呢?
我是这么写的,但是只能匹配出前面的 981222123412306728, 后面的手机号码没办法匹配
([0-9xX]{15,18})[\S\w\da-zA-Z\\[\\]  \s]*(1[0-9\\-]{10,12})?

981222123412306728 和13388888888的前面,中间,后面,可能是任意字符,是不确定的;)

阅读 4.6k
3 个回答

不知道你这个手机号有可能有,有可能没有是指哪一种情况,没的时候要什么结果,我先按我的理解来了
看第一部分应该是身份证号,
下面这个,先匹配[18位身份证](考虑17位的情况就改成[0-9xX]?),再匹配TEL,并匹配TEL两边有空格的情况,再匹配[手机号],手机号匹配完全没有([]也没有)的情况,或者有[]里面10-12位数字的情况

\[[0-9]{17}[0-9xX]\]\s*TEL\s*(\[[0-9]{10,12}\])?

/(?:[^\d]|\b)(\d{15}(?:\d{2}[0-9x])?)[^\d]+(1\d{10})(?:[^\d]|\b)/i

虽然你说他们之前这后之间都可能是任意字符,但是我是把数字除开了的。

var s = [
    "[981222123412306728] TEL[13388888888f",
    "981222123412320,13888888888"
];
var m = /(?:[^\d]|\b)(\d{15}(?:\d{2}[0-9x])?)[^\d]+(1\d{10})(?:[^\d]|\b)/i;
s.forEach(function(t) {
    var r = t.match(m);
    if (r) {
        console.log(r[1], r[2]);
    } else {
        console.log("N/A");
    }
});

^(\\d{6})(18|19|20)?(\\d{2})(0\\d|10|11|12)([012]\\d|3[01])(\\d{3})(\\d|X|x)?$

瞧瞧这个怎么样,忘了哪里看到了,我一直都在用这个,我这个身份证号码检测也是用的这个:身份证查询

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