V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Septembers
V2EX  ›  正则表达式

基于正则验证中国手机号码(2017)

  •  5
     
  •   Septembers · 2017-12-22 08:08:47 +08:00 · 5286 次点击
    这是一个创建于 2288 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以下正则基于 "中国内地移动终端通讯号码" 使用 regexgen 构建生成

    正则验证范围包括 中国移动、中国联通、中国电信(含虚拟运营商号段,不含物联网及卫星号段)

    ^1(?:70\d|(?:9[89]|8[0-24-9]|7[135-8]|66|5[0-35-9])\d|3(?:4[0-8]|[0-35-9]\d))\d{7}$
    

    本正则构建于 2017/12/22 请注意实效性,请以最新的《电信网编号计划》为准。

    see https://zh.wikipedia.org/wiki/中国内地移动终端通讯号码

    see http://www.miit.gov.cn/n1146290/n4388791/c5623706/content.html

    see https://septs.pw/archives/59


    如需生成器请参考如下

    https://gist.github.com/septs/8cb9f6298fa59caef39229fb04c36609

    43 条回复    2017-12-24 10:10:08 +08:00
    lhx2008
        1
    lhx2008  
       2017-12-22 08:13:37 +08:00 via Android
    好复杂,不过收藏了
    ReysC
        2
    ReysC  
       2017-12-22 08:34:25 +08:00
    多谢共享~
    ---
    这个要保存起来,下次做验证用。
    xujiang
        3
    xujiang  
       2017-12-22 08:37:23 +08:00
    mark,多谢
    jingniao
        4
    jingniao  
       2017-12-22 08:43:20 +08:00 via Android
    说实话,我看到过验证 1 开头,然后 10 位数字的的……
    rogwan
        5
    rogwan  
       2017-12-22 08:46:41 +08:00 via Android
    ^1[345789][0-9]{9}$

    极简版,欢迎使用
    superpeaser
        6
    superpeaser  
       2017-12-22 08:48:35 +08:00 via iPhone
    前台验证 1 开头,11 位字符,哈哈哈
    @jingniao
    gstqc
        7
    gstqc  
       2017-12-22 08:51:58 +08:00 via iPhone
    替换掉空格,减号,然后转成整数类型,比较几次大小不是更好?
    Chappako
        8
    Chappako  
       2017-12-22 08:52:18 +08:00   ❤️ 4
    Chappako
        9
    Chappako  
       2017-12-22 08:53:40 +08:00
    @rogwan 你这不支持 166 段啊
    rogwan
        10
    rogwan  
       2017-12-22 08:56:13 +08:00 via Android
    @Chappako 不知道出了 166 号段啊,补上:

    ^1[3456789][0-9]{9}$
    zlhsvc
        11
    zlhsvc  
       2017-12-22 09:03:06 +08:00
    这样验证很久了 ^1(\d){10}$
    nameryan
        12
    nameryan  
       2017-12-22 09:03:33 +08:00
    仿佛又回到了过去的 V2EX,这才有点感觉
    DrJoseph
        13
    DrJoseph  
       2017-12-22 09:08:27 +08:00
    这样的帖子不应该被埋没,支持一下
    lingo
        14
    lingo  
       2017-12-22 09:11:07 +08:00
    我也 1d10 验证了很久。。。
    用户非要输个错的,乱输个别人的我也验证不了不是。
    izzyleung
        15
    izzyleung  
       2017-12-22 09:19:35 +08:00   ❤️ 1
    SourceMan
        16
    SourceMan  
       2017-12-22 09:29:57 +08:00
    已收藏
    这样的帖子难得
    AdamChrist
        17
    AdamChrist  
       2017-12-22 09:33:35 +08:00
    3q
    bxj
        18
    bxj  
       2017-12-22 09:34:17 +08:00
    死盖伊.....
    renyijiu
        19
    renyijiu  
       2017-12-22 09:40:37 +08:00
    @jingniao 我就是这么验证的。。。。因为功能中手机号没什么真实作用
    wzw
        20
    wzw  
       2017-12-22 10:38:03 +08:00
    大家来说说 香港 台湾 美国 电话号码 的正则
    34C
        21
    34C  
       2017-12-22 10:46:31 +08:00
    前端验证 1 开头 10 数字,后端发短信验证码才是王道……
    如果不需要短信验证码的,怎么验都是白搭,填个 13800138000 就过了
    ZxBing0066
        22
    ZxBing0066  
       2017-12-22 11:08:23 +08:00
    没啥意义 直接 /1\d{10}/够用了,真实性还得靠短信
    mokeyjay
        23
    mokeyjay  
       2017-12-22 11:10:15 +08:00
    没啥意义 直接 /1\d{10}/够用了,真实性还得靠短信 +1
    freeminder
        24
    freeminder  
       2017-12-22 11:11:43 +08:00
    写这么多,尾巴还是`\d{7}`
    ven
        25
    ven  
       2017-12-22 11:17:04 +08:00
    @34C 后端也不一定要验证,好一点的短信服务都是按照成功付费的,13800138000 这种一般会返回空号或者不允许发送~
    wzw
        26
    wzw  
       2017-12-22 11:38:53 +08:00 via Android
    @ven 阿里云 好像 不是成功付费
    pofycn
        27
    pofycn  
       2017-12-22 11:40:26 +08:00 via Android
    马一下,说不定以后用的到哈哈
    guyskk0x0
        28
    guyskk0x0  
       2017-12-22 11:42:56 +08:00 via Android
    重要的发短信验证码验证,不重要的验证下 1 开头 11 位数字就行了,复杂的正则容易误杀正常手机号
    guyskk0x0
        29
    guyskk0x0  
       2017-12-22 11:46:12 +08:00 via Android
    之前遇到过用户反馈注册不了,排查发现是正则的锅,这种有时效性的正则尽量不要用
    quicknight
        30
    quicknight  
       2017-12-22 11:55:09 +08:00
    用正则式验证手机号,除了给维护带来麻烦,几乎没有好处
    验证手机号,只能靠短信
    quicknight
        31
    quicknight  
       2017-12-22 11:56:00 +08:00
    @jingniao 这种都比复杂的正则式要靠谱
    oh
        32
    oh  
       2017-12-22 11:59:57 +08:00 via iPhone
    @ven 所以更可以验证有效性啊
    geelaw
        33
    geelaw  
       2017-12-22 12:05:29 +08:00 via iPhone
    不要用 \d,它不是 [0-9] 的另一种写法
    Oo0
        34
    Oo0  
       2017-12-22 12:08:32 +08:00
    短信才靠譜
    geelaw
        36
    geelaw  
       2017-12-22 12:25:24 +08:00
    @Septembers 你的第一个链接不是已经告诉你了么?
    jason19659
        37
    jason19659  
       2017-12-22 13:47:50 +08:00
    1\d{10}
    GooMS
        38
    GooMS  
       2017-12-22 13:52:26 +08:00 via Android
    我一般只验证是数字就行了,然后靠短信验证码
    q409195961
        39
    q409195961  
       2017-12-22 14:27:11 +08:00
    有谁分享下最新的省市区 JSON 数据呗
    Septembers
        40
    Septembers  
    OP
       2017-12-22 14:34:36 +08:00
    ETiV
        41
    ETiV  
       2017-12-22 14:56:25 +08:00 via iPhone
    前端 1d10
    后端遇到 100d8 的就通过微信发验证码给我,可以有测试用的账户
    evolify
        42
    evolify  
       2017-12-22 16:11:16 +08:00
    早来 v2 就好了,刚刚自己琢磨了半天
    bk201
        43
    bk201  
       2017-12-24 10:10:08 +08:00 via iPhone
    这样靠正则验证容易出问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   926 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 20:54 · PVG 04:54 · LAX 13:54 · JFK 16:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.