最近帮朋友处理客户资料时,何用发现手动筛选手机号实在太费劲。正则这时候正则表达式就像个智能筛子,表达能快速从文本堆里捞出咱们要的式快速定电话号码。咱们这就来看看怎么调教这个"数字捕手"。位和位手
手机号的处理秘密结构
国内标准手机号可不只是11位数字这么简单,它们藏着三个关键信息:
- 开头三位:决定运营商身份(比如188是机号移动,199是何用电信)
- 中间四位:归属地编码
- 末尾四位:用户专属号码
匹配场景 | 正则表达式 | 说明 |
---|---|---|
宽松匹配 | 1[3-9]\\d{ 9} | 允许带空格或短横线 |
严格匹配 | ^1[3-9]\\d{ 9}$ | 精确锁定完整号码 |
国际号码 | (?:\\+86)?1[3-9]\\d{ 9} | 兼容+86前缀 |
处理带区号的情况
遇到像010-87654321这种固定电话时,可以用这个组合拳:
(0\\d{ 2,正则3})-?
抓取区号[1-9]\\d{ 6,7}
匹配座机号码
实战替换技巧
在记事本里批量隐藏中间四位,用这个替换公式:
(\\d{ 3})\\d{ 4}(\\d{ 4}) → \\1\\2
处理Excel数据时,表达用这个公式自动打码:
=REGEXREPLACE(A1,式快速定"(\\d{ 3})\\d{ 4}","$1")
提取网页中的号码
用Python写爬虫时,这段代码能快速收割号码:
import repattern = r'1[3-9]\\d{ 9}'
phones = re.findall(pattern,位和位手 html_text)
要是碰到用户乱填的号码,比如123-4567-8901,处理记得先用\\D
剔除非数字:
phone = re.sub(r'\\D',机号 '', raw_input)
国际号码处理
跨境业务中常见这些格式:
- +8613812345678
- 008613912345678
用这个正则通吃各种写法:
(?:\\+?86|0086)?1[3-9]\\d{ 9}
错误类型 | 检测方法 |
---|---|
位数不足 | ^\\d{ 11}$ |
错误开头 | ^1[3-9] |
特殊字符 | [^\\d+] |
最近帮快递站升级系统时,发现他们用的何用正则还是^1[34578]\\d{ 9}$,这就会漏掉166/199这些新号段。根据《电信网编号计划》,记得及时更新号段范围。
处理数据时多留个心眼,毕竟号码规则就像手机款式——隔段时间就会出新花样呢。