zl程序教程

您现在的位置是:首页 >  Python

当前栏目

Python手机号合法性判断(列表和正则)

2023-04-18 14:15:13 时间

Python手机号合法性判断(列表和正则)

注意:这里不对地区编码(第4-7位)和用户号码(第8-11位)进行合法性判断!

需要进行哪些判断:

1. 号码是否为11位
2. 号码是否全为数字
3. 号段(前三位)是否合法

手机号段:

 移动号段:139 138 137 136 134 135 147 150 151 152 157 158 159 172 178 182 183 184 187 188 195 197 198
 联通号段:130 131 132 140 145 146 155 156 166 185 186 175 176 196
 电信号段:133 149 153 177 173 180 181 189 191 193 199
 虚拟运营商号段:162 165 167 170 171

这里介绍了两种实现方法,一是用列表来实现,二是用正则表达式来实现

  1. 列表实现

    这种方法对于像我这样的初学者来说很友好,简单易懂

# 号段列表
list1 = [139, 138, 137, 136, 134, 135, 147, 150, 151, 152, 157, 158, 159, 172, 178,
         130, 131, 132, 140, 145, 146, 155, 156, 166, 185, 186, 175, 176, 196,
         133, 149, 153, 177, 173, 180, 181, 189, 191, 193, 199,
         162, 165, 167, 170, 171]
         
# 键入手机号码
phone = input("请输入11位手机号码")

# len(phone) == 11,判断phone是否为11位
# phone.isnumeric(),判断phone是否全为数字
# int(phone[:3]) in list1,判断phone前三位是否在合法号段列表内
if len(phone) == 11 and phone.isnumeric() and (int(phone[:3]) in list1):
    print("手机号码合法!")
else:
    print("手机号码非法!")
         
  1. 正则表达式实现

    正则表达式强大、便捷、高效,但掌握起来有一定难度

import re
phone = input("请输入11位手机号码:")
pattern = re.compile(r'^(13[0-9]|14[0|5|6|7|9]|15[0|1|2|3|5|6|7|8|9]|'
                         r'16[2|5|6|7]|17[0|1|2|3|5|6|7|8]|18[0-9]|'
                         r'19[1|3|5|6|7|8|9])d{8}$')
if pattern.search(phone):
    print("手机号码合法!")
else:
    print("手机号码非法!")

更多正则表达式的实现可访问菜鸟教程

如果您喜欢这篇文章就请点赞收藏噢!
如果您发现错误或不足,欢迎在评论区指出噢!