JavaScript中国手机号校验

校验手机号的基本规则

中国大陆手机号为11位数字,通常以特定号段开头。常见号段包括:

  • 移动:134、135、136、137、138、139、147、150、151、152、157、158、159、172、178、182、183、184、187、188、198
  • 联通:130、131、132、145、155、156、166、171、175、176、185、186
  • 电信:133、149、153、173、177、180、181、189、199
  • 虚拟运营商:170、171

正则表达式校验方法

使用正则表达式进行简单校验:

javascript 复制代码
function isPhoneNumber(phone) {
  return /^1[3-9]\d{9}$/.test(phone);
}

更精确的号段校验:

javascript 复制代码
function isPhoneNumberStrict(phone) {
  return /^1(3[0-9]|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/.test(phone);
}

分段校验方法

如果需要更精确的校验,可以将号段拆分为数组:

javascript 复制代码
const segments = [
  // 移动
  '134','135','136','137','138','139','147','150','151','152',
  '157','158','159','172','178','182','183','184','187','188','198',
  // 联通
  '130','131','132','145','155','156','166','171','175','176','185','186',
  // 电信
  '133','149','153','173','177','180','181','189','199'
];

function isPhoneNumberSegment(phone) {
  if (!/^1\d{10}$/.test(phone)) return false;
  return segments.includes(phone.substring(0, 3));
}

国际化考虑

对于国际手机号校验,可以使用更通用的正则表达式:

javascript 复制代码
function isInternationalPhone(phone) {
  return /^\+?[1-9]\d{1,14}$/.test(phone);
}

实际应用建议

在实际项目中,建议:

  1. 前端进行简单格式校验
  2. 后端进行更严格的校验
  3. 通过短信验证码进行最终验证

前端完整校验示例:

javascript 复制代码
function validatePhone(phone) {
  const cleaned = phone.replace(/\D/g, '');
  if (!/^1\d{10}$/.test(cleaned)) return false;
  
  const segment = cleaned.substring(0, 3);
  const segments = [
    '130','131','132','133','134','135','136','137','138','139',
    '145','147','149','150','151','152','153','155','156','157',
    '158','159','166','170','171','172','173','175','176','177',
    '178','180','181','182','183','184','185','186','187','188',
    '189','198','199'
  ];
  
  return segments.includes(segment);
}
相关推荐
FreeTinker2 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396232 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
wangruofeng3 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
BigTopOne4 小时前
WebRTC Native / Android 开发学习资源整理
前端
excel5 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
何以解忧,唯有..5 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
软件聚导航6 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
恋猫de小郭6 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
yma166 小时前
通过提示词实现GitHub Pages 和 Nginx 双部署竟然这么简单?
前端
前端 贾公子7 小时前
第09章:上下文与记忆 (2)
java·服务器·前端