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
正则表达式校验方法
使用正则表达式进行简单校验:
function isPhoneNumber(phone) {return /^1[3-9]\d{9}$/.test(phone);
}
更精确的号段校验:
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);
}
分段校验方法
如果需要更精确的校验,可以将号段拆分为数组:
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));
}
国际化考虑
对于国际手机号校验,可以使用更通用的正则表达式:
function isInternationalPhone(phone) {return /^\+?[1-9]\d{1,14}$/.test(phone);
}
实际应用建议
在实际项目中,建议:
- 前端进行简单格式校验
- 后端进行更严格的校验
- 通过短信验证码进行最终验证
前端完整校验示例:
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);
}