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);
}
相关推荐
草莓熊Lotso33 分钟前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
Olrookie1 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
533_1 小时前
[vue] dayjs 显示实时时间
前端·javascript·vue.js
故事与他6452 小时前
XSS_and_Mysql_file靶场攻略
前端·学习方法·xss
莫的感情2 小时前
下载按钮点击一次却下载两个文件问题
前端
一个很帅的帅哥2 小时前
JavaScript事件循环
开发语言·前端·javascript
小宁爱Python3 小时前
Django Web 开发系列(二):视图进阶、快捷函数与请求响应处理
前端·django·sqlite
fox_3 小时前
深入理解React中的不可变性:原理、价值与实践
前端·react.js
Github项目推荐3 小时前
你的错误处理一团糟-是时候修复它了-🛠️
前端·后端
Code小翊3 小时前
C语言bsearch的使用
java·c语言·前端