手机号码正则表达式

手机号码的规则

  1. 11位,第一位一定是1
  2. 第二位和第三位根据不同运营商的号码段有所区别,只有有限的组合是合法的手机号码
  3. 后8位可以是任意数字
^1(3[0-9]|5[0-3,5-9]|7[1-3,5-8]|8[0-9])\d{8}$

解释:
^:代表起始,即手机号码只能以1为开头
3[0-9]:代表手机号码第二位可以是3,第三位可以是0-9中任意一个数字
5[0-3,5-9]:代表手机号码第二位也可以是5,第三位是0-3和5-9中的任意一个数字
在这里,以3开头的,以5开头的,以及以8开头的三种情况,我们用“|”来将他们隔开
\d:匹配一个数字字符,等价于 [0-9]
$:终止符,代表不可以再有第12位了

正则里面的中括号[]只能匹配其中一个,如果要匹配特定几组字符串的话,
那就必须使用小括号()加或|,我还以为在中括号中也能使用或|符号,
原来|在中括号里面也是一个字符,并不代表或。[3457]匹配3或者4或者5或者7,
而(3457)只匹配3457,若要跟前面一样可以加或(3|4|5|7)。
[34|57]匹配3或者4或者|或者5或者7.而(34|57)能匹配34或者57。




三大运营商号码规则

中国电信号段

133、149、153、173、177、180、181、189、199

中国联通号段

130、131、132、145、155、156、166、175、176、185、186

中国移动号段

134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、188、198

其他号段

  14号段以前为上网卡专属号段,如中国联通的是145,中国移动的是147等等。

  虚拟运营商

  电信:1700、1701、1702

  移动:1703、1705、1706

  联通:1704、1707、1708、1709、171

精确验证手机号码

根据电信,移动,联通目前发行的号码来的。验证比较精确

#第一位以1开头,第二位以[3|4|5|7|8]里面任何一位数作参数,第三位以[0-9]任何9位数字作参数
^1[3|4|5|7|8][0-9]{9}$

如果因为现有的号码不能满足市场需求,电信服务商会增大号码范围。所以一般情况下我们只要验证手机号码为11位,且以1开头

#第一位以1开头,第二位以[0-9]任何10位数字作参数
^1[0-9]{10}$

事例

后台python验证

模板

#xxx要求规范,value传入值
re.macth(xxx,value)
import re
phone_true = ['13912345678','15912345678','17212345678','18212345678']
phone_false = ['124344534543','4454543534','1234521345']
reg = r"^1(3[0-9]|5[0-9]|7[0-9]|8[0-9])\d{8}$"
for item in phone_true:
    ret = re.match(reg,item)
    if not ret:
        print('匹配不成功')
    else:
        print('匹配成功')  

for item in phone_false:
    ret = re.match(reg,item)
    if not ret:
        print('匹配不成功')
    else:   
         print('匹配成功')   

前端js验证

模板

#Reg规范,value值
var Reg = /^1[34578]\d{9}$/;
Reg.test(value)
<body>
<button type="button" onclick="myFunction()">点我</button>
<script>
function myFunction() {
    
    var phoneRegex = /^1[34578]\d{9}$/; 
    var phone='13912345678';
    if(phoneRegex.test(phone)) {  
        alert('手机号格式正确');  
    } else {  
        alert('手机号格式错误');  
    }  
    
} 
</script>

</body>
<body>
<button type="button" onclick="myFunction()">点我</button>
<script>
function myFunction() {
    var phone_true = ['13912345678','15912345678','17212345678','18212345678']
    var phone_false = ['124344534543','4454543534','1234521345']
    for(var i = 0; i<phone_true.length;i++){
        if(phoneRegex.test(phone_true[i])) {  
        alert('手机号格式正确');  
        } else {  
        alert('手机号格式错误');  
        }  
    }
   
} 
</script>

</body>
const phoneRegex1 = /^1[34578]\d{9}$/;
const phoneRegex2 =  /^1[3|4|5|7|8][0-9]{9}$/;
const phoneRegex2 = /^1[3-9]{10}$/;
const phoneRegex3 = /^1(3|4|5|6|7|8|9)\d{9}$/;
const phoneRegex4 =  /^1(3[0-9]|5[0-3,5-9]|7[1-3,5-8]|8[0-9])\d{8}$/;
以上匹配值都是相似

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值