校验手机号的基本规则
中国大陆手机号为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
正则表达式校验方法
使用正则表达式进行简单校验:
1function isPhoneNumber(phone) { 2 return /^1[3-9]\d{9}$/.test(phone); 3} 4
更精确的号段校验:
1function isPhoneNumberStrict(phone) { 2 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); 3} 4
分段校验方法
如果需要更精确的校验,可以将号段拆分为数组:
1const segments = [ 2 // 移动 3 '134','135','136','137','138','139','147','150','151','152', 4 '157','158','159','172','178','182','183','184','187','188','198', 5 // 联通 6 '130','131','132','145','155','156','166','171','175','176','185','186', 7 // 电信 8 '133','149','153','173','177','180','181','189','199' 9]; 10 11function isPhoneNumberSegment(phone) { 12 if (!/^1\d{10}$/.test(phone)) return false; 13 return segments.includes(phone.substring(0, 3)); 14} 15
国际化考虑
对于国际手机号校验,可以使用更通用的正则表达式:
1function isInternationalPhone(phone) { 2 return /^\+?[1-9]\d{1,14}$/.test(phone); 3} 4
实际应用建议
在实际项目中,建议:
- 前端进行简单格式校验
- 后端进行更严格的校验
- 通过短信验证码进行最终验证
前端完整校验示例:
1function validatePhone(phone) { 2 const cleaned = phone.replace(/\D/g, ''); 3 if (!/^1\d{10}$/.test(cleaned)) return false; 4 5 const segment = cleaned.substring(0, 3); 6 const segments = [ 7 '130','131','132','133','134','135','136','137','138','139', 8 '145','147','149','150','151','152','153','155','156','157', 9 '158','159','166','170','171','172','173','175','176','177', 10 '178','180','181','182','183','184','185','186','187','188', 11 '189','198','199' 12 ]; 13 14 return segments.includes(segment); 15} 16
《JavaScript中国手机号校验》 是转载文章,点击查看原文。
