首页 新闻 会员 周边

[C#]验证国内手机号码的最准确正则表达式

0
悬赏园豆:100 [已解决问题] 解决于 2017-04-24 13:51

国内手机号码的规则(来自百度百科):

前3位为网络识别号;第4-7位为地区编码;第8-11位为用户号码。

移动:

1340-1348、135、136、137、138、139、150、151、152、157、158、159、182、183、184、187、188、147、178

联通:

130、131、132、155、156、145、185、186、176、175

电信:

133、153、180、181、189、177、173、149

虚拟运营商:

170[1700/1701/1702(电信)、1703/1705/1706(移动)、1704/1707/1708/1709(联通)、171(联通)

请问用C#如何写出最准确的正则表达式?

dudu的主页 dudu | 高人七级 | 园豆:30948
提问于:2017-04-24 11:26
< >
分享
最佳答案
0
  /// <summary>
        /// 判断输入的字符串是否是一个合法的手机号
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static bool IsMobilePhone(string input)
          {
              Regex regex = new Regex("^1[34578]\\d{9}$");
             return regex.IsMatch(input);
  
        }

我们公司开始写的发现跟不上时代,就补加了第二位 5/7/8,感觉运营商变来变去,很难写太完整,都是出了问题再加

收获园豆:80
风醉 | 小虾三级 |园豆:1197 | 2017-04-24 11:31
其他回答(4)
0

没有最准确的,楼上兄弟所说,运营商会变的

收获园豆:5
奈何一笑 | 园豆:439 (菜鸟二级) | 2017-04-24 11:44
0

这个好办啊 接入短信验证码或者语音验证码就ok 能打通或者能接收到验证码就是对的 否则 ,,,

当然 成本高了些

收获园豆:5
nil | 园豆:879 (小虾三级) | 2017-04-24 12:47
0

这个是联通的正则:

(1((?:(3[0-2]))|(?:(45))|(?:([5|7|8][5-6]))))(\d{8})

其他的类似。
可以将正则写在配置文件或者数据库中,这样有新增也没事的。

收获园豆:10
CodeHsu | 园豆:5468 (大侠五级) | 2017-04-24 13:12
0

我的号码是199开头的怎么破?

wsssss | 园豆:202 (菜鸟二级) | 2018-04-18 08:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册