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);
}
相关推荐
王晓枫2 分钟前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊2 分钟前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter8 分钟前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折22 分钟前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_30 分钟前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
Angelial40 分钟前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu1 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu1 小时前
Angular6学习笔记13:HTTP(3)
前端
小码哥_常1 小时前
Kotlin抽象类与接口:相爱相杀的编程“CP”
前端
evelynlab1 小时前
Tapable学习
前端