如何判断通过这个验证规则

现在有一个需求 开头是

    130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 145, 147, 150, 151, 152, 153, 155, 156, 157, 158, 159, 173, 175, 176, 177, 178, 180, 181, 182, 183, 184, 184, 185, 186, 187, 188, 189, 166, 198, 199
     

的这些的手机号才能通过验证, 怎么实现这个方法比较好? 如果用正则,有没有比较简便的写法

阅读 2.5k
4 个回答

真心建议你别做这件事, 手机号有效范围三天两头变, 如需验证,请用短信或语音, 如不需要严格, 验证1开头的11位数就好. 否则以后会让维护的人不断踩坑. 因为就算符合上面的规则, 仍有很多无效的空号.

def judge(tel):
    begin=('130', '131', '132', '133', '134',
           '135', '136', '137', '138', '139',
           '145', '147', '150', '151', '152',
           '153', '155', '156', '157', '158',
           '159', '173', '175', '176', '177',
           '178', '180', '181', '182', '183',
           '184', '184', '185', '186', '187',
           '188', '189', '166', '198', '199')
    #首先判断是否为None
    if tel:
        #判断tel开始字符串是否满足要求
        return str(tel).startswith(begin)
    else:
        return False

参考:Python实用技法第21篇:在字符串的开头和结尾处做文本匹配

import re
pat=re.compile(r'1[3-9][0-9]')
m=re.match(pat,手机号字符串)
if m is not None:
    print('ok')
else:
     print('not phone number')

第一个回答已经很好了,如果要严格验证的话代码如下:

import re

m = re.match(r"^1(([358][0-9])|(4[57])|(7[35678])|(9[89])|66)\d{8}$", "15100000000")
if m:
    print(m.group())
# 154这个开头可以通过,自己可以改成5[012356789]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题