一、11位手机号正则表达式中的数字和格式
手机号目前采用11位数字作为唯一标识,其中第一位数字为1。如果希望匹配国内所有手机号,可以使用如下代码:
/^1[3|4|5|6|7|8|9][0-9]{9}$/
其中^和$分别代表字符串的开始和结尾,中间包含一段由"1"开头,第二位为3~9之间任意数字,后面加上9位数字的组合,用于匹配所有符合规则的手机号。如下示例代码将会判断手机号是否符合规则:
<input type="text" id="test" onchange="checkPhoneNumber()"> <script type="text/javascript"> function checkPhoneNumber(){ var pattern = /^1[3|4|5|6|7|8|9][0-9]{9}$/; var phoneNumber = document.getElementById("test").value; if (pattern.test(phoneNumber)) { alert("手机号格式正确!"); } else { alert("手机号格式错误!"); } } </script>
这段代码会触发一个onchange事件,当用户输入内容改变时,检查输入的手机号是否符合规则并给出相应提示。
二、手机号正则表达式中的扩展匹配规则
除上述规则外,有时候还需要匹配一些特定的手机号码格式,如座机号码、大陆或港澳台的手机号码格式。下面给出一些扩展的正则表达式规则:
1、匹配座机号码
座机号码在国内是有一定格式规定的,格式大致如下:
XXXX-XXXXXXX XXXX-XXXXXXXX XXXXXXX XXXXXXXX
其中"X"表示数字。下面的代码可以匹配以上座机号码格式:
/^0\d{2,3}-\d{7,8}$|^1[3|4|5|6|7|8|9][0-9]{9}$/
其中"|"表示“或者”的意思。在这里的正则表达式规则中,表示如果数字格式不是XXX-XXXXXXX或XXX-XXXXXXXX或XXXXXXX或XXXXXXXX,那么就检查是否是符合手机号规则的11位数字码。
2、匹配大陆、港澳台以及其他手机号
在国内,大陆、港澳台以及其他地区的手机号码格式可能不同。下面给出一些参考的正则表达式代码:
大陆手机:
/^1[3|4|5|6|7|8|9][0-9]{9}$/
港澳台手机:
/^(00852)?[569]\d{7}$/ /*香港*/ /^(00853)?6\d{7}$/ /*澳门*/ /^(00886)?09\d{8}$/ /*台湾大陆机*/ /^(00886)?\d{10}$/ /*台湾*/
其他地区手机:
/^[1-9]\d{4,10}$/ /*海外手机*/
使用示例:
<input type="text" id="test" onchange="checkPhoneNumber()"> <script type="text/javascript"> function checkPhoneNumber(){ var pattern = /^0\d{2,3}-\d{7,8}$|^1[3|4|5|6|7|8|9][0-9]{9}$|^(00852)?[569]\d{7}$|^(00853)?6\d{7}$|^(00886)?09\d{8}$|^(00886)?\d{10}$|^[1-9]\d{4,10}$/; var phoneNumber = document.getElementById("test").value; if (pattern.test(phoneNumber)) { alert("手机号格式正确!"); } else { alert("手机号格式错误!"); } } </script>
三、常见手机号前缀的正则表达式匹配
值得注意的是,目前大多数手机号前缀已被运营商认领,如移动的号码都是以134、135、136、137、138、139、150、151、152、157、158、159、182、183、184、187、188、198开头的。因此,我们也可以根据目前常见的手机号前缀制定正则表达式匹配规则。
例如,我们可以编写代码用来匹配移动、联通、电信等主流运营商的手机号码:
var cmccReg = /^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\d{8}$/; var cuccReg = /^1(3[0-2]|4[5]|5[5-6]|6[6]|7[5-7]|8[56])\d{8}$/; var ctccReg = /^1(3[3]|4[9]|5[3]|7[0]|8[0-1]|8[9]|9[0-9])\d{8}$/;
其中,cmccReg用来匹配中国移动的号码,cuccReg用来匹配中国联通的号码,ctccReg用来匹配中国电信的号码。如果希望匹配允许的所有手机号码,可以将以上三个正则表达式用"|"拼接在一起,例如:
var phoneReg = /^(1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])|1(3[0-2]|4[5]|5[5-6]|6[6]|7[5-7]|8[56])|1(3[3]|4[9]|5[3]|7[0]|8[0-1]|8[9]|9[0-9]))\d{8}$/;
以上代码给出了中国移动、中国联通和中国电信的号码匹配规则,如果将它们用“|”连成一起,就可以匹配国内主流运营商提供的所有手机号码。
四、手机号前缀匹配规则的应用
可以在实际开发应用中使用以上给出的正则表达式,例如:
<input type="text" id="test" onchange="checkPhoneNumber()"> <script type="text/javascript"> function checkPhoneNumber(){ var phoneReg = /^(1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])|1(3[0-2]|4[5]|5[5-6]|6[6]|7[5-7]|8[56])|1(3[3]|4[9]|5[3]|7[0]|8[0-1]|8[9]|9[0-9]))\d{8}$/; var phoneNumber = document.getElementById("test").value; if (phoneReg.test(phoneNumber)) { alert("手机号格式正确!"); } else { alert("手机号格式错误!"); } } </script>
在这个示例中,使用了以上规则来匹配国内的主流运营商提供的所有手机号,自动检测输入的手机号码是否符合要求。
总结
本文从常用的手机号匹配规则入手,给出了多种正则表达式代码,包括11位手机号正则表达式、座机号码匹配规则、大陆、港澳台、海外手机和各主流运营商的手机号码匹配规则,旨在帮助开发人员更好地完成验证手机号码的功能。