首页/开发/正则与编码速查/手机号校验正则的宽严取舍
正则进阶45 条

手机号校验正则的宽严取舍

手机号校验宜宽不宜严:常用写法是限制 11 位与首位数字范围,并允许加号国家码与常见分隔符,输入先归一化再校验;E.164 用于国际场景。归属地、运营商与是否在用无法靠正则判断,需要专门号码库。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌​​​​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌‌​‌​‌​‌‌​‌‌​‌​‌‌​​​‌​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

手机号校验的宽严取舍

手机号规则会随时间变化:号段持续新增,携号转网让运营商与号段不再对应,虚拟运营商与物联网卡又带来新的形态。把号段写死在正则里,短则几个月就要改一次。更稳的做法是:只校验「长度加首位数字」这一层形状,把输入先归一化,复杂判断交给专门的号码库。

基本信息

内地手机号11 位数字,以 1 开头,第二位常见为 3 到 9
国际格式E.164 规定总长不超过 15 位,以加号加国家码开头
归一化去掉空格、连字符、括号与斜杠,把国家码前缀统一为加号加国家码
不可用正则判断号码归属地、运营商、是否在用、是否可接通

典型使用场景

  • 注册与登录表单:提交前挡掉位数或字符明显错误的输入,降低无效短信成本
  • 通讯录导入:清洗历史数据时先归一化再判断格式,把异常记录单独列出
  • 数据脱敏:识别号码位置后做中间四位掩码,日志与导出文件一并处理
  • 风控特征:把格式异常与频繁重试作为特征之一,而不是唯一的拦截依据
  • 多地区业务:按用户所在地区选择规则,避免用同一套规则处理所有国家

校验与归一化写法

校验与归一化写法
# 保守写法:只限制位数与首位,号段变化时不需改模式
^1[3-9]\d{9}$
# 允许国家码前缀:加号可省,国家码前后可带空格或连字符
^(?:\+?86[ -]?)?1[3-9]\d{9}$
# 国际通用形状:E.164 总长限制,具体国家规则交给号码库
^\+[1-9]\d{6,14}$
# 归一化:先去分隔符,再统一国家码写法
digits = re.sub(r'[\s()\-]', '', raw)       # 去掉常见分隔符
if digits.startswith('0086'): digits = '+86' + digits[4:]

校验尺度与代价

尺度模式代价
最宽只判断长度与首位几乎不改,但会放过少量无效号码
中等限制第二位数字范围号段新增时可能需要微调
最严逐个列举号段需频繁维护,漏更新会拒掉真实用户
按国别分地区规则或号码库实现成本高,但准确率最好
如果业务确实要求校验到号段,把号段清单放到配置或数据库里,做成可按期更新的数据,而不是写死在代码或模式中;这样一次更新能覆盖所有使用方。
手机号是个人敏感信息:采集需说明用途,展示与日志应脱敏,导出文件要控制范围;把完整号码写入普通日志是常见但代价很高的合规问题。

易错点

  • 把号段写死在正则里:新号段上线后真实用户注册被拒,而修复需要发版,响应周期长
  • 只允许纯 11 位数字:用户输入带空格、连字符或加号国家码时被误判非法
  • 用长度判断代替有效性:符合位数的随机数字同样通过,短信成本照付
  • 把归属地判断交给正则:携号转网与虚拟运营商让号段与运营商不再对应
  • 在日志与报错里记录完整号码:脱敏缺失,一次排障就可能把敏感数据扩散到多个系统

数据来源与参考

  • ITU-T E.164:国际公众电信编号方案
  • 中国内地号码编码规范相关行业标准与运营商公告
  • libphonenumber 官方文档:号码解析与校验 API

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/phone-number-regex-validate.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌​​​​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌‌​‌​‌​‌‌​‌‌​‌​‌‌​​​‌​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​