您的位置:

手机号正则表达式匹配规则大全

一、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位手机号正则表达式、座机号码匹配规则、大陆、港澳台、海外手机和各主流运营商的手机号码匹配规则,旨在帮助开发人员更好地完成验证手机号码的功能。