一个javascript正则匹配,同时匹配身份证和手机号码
迷茫
迷茫 2017-04-10 17:23:18
[JavaScript讨论组]

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

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
PHP中文网

不知道你这个手机号有可能有,有可能没有是指哪一种情况,没的时候要什么结果,我先按我的理解来了
看第一部分应该是身份证号,
下面这个,先匹配[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");
    }
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号