python实现隐藏手机号码中间四位的方法及注意事项

方法一:使用正则表达式里的sub方法匹配替换(最好的方法)

import re

phone = "13434562341"
result = re.sub(r"(\d{3})(\d{4})(\d{4})", r"\1****\3", phone)
print(result)  # 输出结果 134****2341

方法二:使用字符串的replace方法

phone = "13434562341"
result = phone.replace(phone[3:7], '****')
print(result) # 输出结果 134****2341

但replace方法有时会出现意想不到的bug,就是当手机号码非常特殊时(虽然可能性小)!

phone1 = "18933333333"
phone2 = "13333333333"

result1 = phone1.replace(phone[3:7], '****')
result2 = phone2.replace(phone[3:7], '****')
print(result1)  # 输出结果 189********
print(result2)  # 输出结果 1********33

可以看到,replace方法本意是想将号码的第4到7位替换为星号,但像phone1和phone2这种特殊的号码就会发生意外情况。

像phone1的号码还可以使用替换次数控制得到想要的结果,但phone2的号码无法做到

phone1 = "18933333333"
phone2 = "13333333333"

result1 = phone1.replace(phone[3:7], '****', 1)  # 控制replace只替换一次
result2 = phone2.replace(phone[3:7], '****', 1)
print(result1)  # 输出结果 189****3333 
print(result2)  # 输出结果 1****333333

猜你喜欢

转载自blog.csdn.net/qq_37140721/article/details/129375550