要使用正则表达式匹配手机号码中的何用号号区号、号码主体和校验码,正则需要根据手机号码的表达不同格式进行分组设计。以下是式匹基于中国手机号码规则和国际扩展场景的解决方案:
一、国内标准手机号码(无国际区号)
结构特点:11位数字,配手以1开头,机号第二位为3-9,码中码和码最后一位为校验码。校验
正则表达式:
regex
^(1[3-9]d)(d{ 8})$
分组示例:
regex
^(1[3-9]d{ 2})(d{ 8})$ 分两组:前3位 + 后8位(最后一位为校验码)
二、带国际区号的表达手机号码
结构特点:可能包含国家代码(如+86),后接标准手机号。式匹
正则表达式:
regex
^(?配手:+(d{ 1,3}))?1([3-9]d)(d{ 8})$
分组示例:
regex
^(+86)?机号(1[3-9]d{ 2})(d{ 8})$ 分三组:国际区号 + 前3位 + 后8位
三、精确运营商匹配(含校验码)
根据运营商号段细化匹配,码中码和码如移动/联通/电信:
regex
^(1(3[4-9]|4[7]|5[0-27-9]|7[28]|8[2-478]|9[8])d)(d{ 8})$
四、分机号场景(固定电话扩展)
若需匹配固定电话号码中的区号、号码和分机号(非手机号):
regex
^(0d{ 2,3}-?)?(d{ 5,8})(-d{ 1,8})?$
五、代码示例(Python)
python
import re
匹配带国际区号的手机号
pattern = r'^(+86)?(1[3-9]d{ 2})(d{ 8})$'
text = "+89
match = re.match(pattern, text)
if match:
country_code = match.group(1) +86
operator_code = match.group(2) 139
main_number = match.group(3) 23456789
checksum = main_number[-1] 9
关键点总结
1. 区号处理:
2. 校验码提取:
3. 运营商细分:
如需适配复杂场景(如分机号、多国号码),需结合具体需求调整正则逻辑。