手机号码的规则
- 11位,第一位一定是1
- 第二位和第三位根据不同运营商的号码段有所区别,只有有限的组合是合法的手机号码
- 后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}$/;
以上匹配值都是相似