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);
}
相关推荐
jingling55510 小时前
vue | 在 Vue 3 项目中集成高德地图(AMap)
前端·javascript·vue.js
油丶酸萝卜别吃10 小时前
Vue3 中如何在 setup 语法糖下,通过 Layer 弹窗组件弹出自定义 Vue 组件?
前端·vue.js·arcgis
J***Q29217 小时前
Vue数据可视化
前端·vue.js·信息可视化
ttod_qzstudio18 小时前
深入理解 Vue 3 的 h 函数:构建动态 UI 的利器
前端·vue.js
_大龄18 小时前
前端解析excel
前端·excel
一叶茶19 小时前
移动端平板打开的三种模式。
前端·javascript
前端大卫19 小时前
一文搞懂 Webpack 分包:async、initial 与 all 的区别【附源码】
前端
Want59519 小时前
HTML音乐圣诞树
前端·html
老前端的功夫20 小时前
前端浏览器缓存深度解析:从网络请求到极致性能优化
前端·javascript·网络·缓存·性能优化
Running_slave20 小时前
你应该了解的TCP滑窗
前端·网络协议·tcp/ip