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);
}
相关推荐
Carry34518 分钟前
不清楚的 .gitignore
前端·git
张鑫旭25 分钟前
AI时代2025年下半年学的这些Web前端特性有没有用?
前端·ai编程
pinkQQx26 分钟前
H5唤醒APP技术方案入门级介绍
前端
Lefan29 分钟前
UniApp 隐私合规神器!一键搞定应用市场审核难题 - lf-auth 隐私合规助手
前端
Null15529 分钟前
浏览器唤起桌面端应用(进阶篇)
前端·浏览器
Jing_Rainbow32 分钟前
【Vue-2/Lesson62(2025-12-10)】模块化与 Node.js HTTP 服务器开发详解🧩
前端·vue.js·node.js
风度前端1 小时前
用了都说好的 uniapp 路由框架
前端
冴羽1 小时前
2026 年 Web 前端开发的 8 个趋势!
前端·javascript·vue.js
码银1 小时前
ruoyi的前端(vue)新增的时候给字典设置默认值 但不能正常
前端
凌览2 小时前
别再死磕 Nginx!http-proxy-middleware 低配置起飞
前端·后端