PHP实现字符串中手机号与邮箱的部分内容隐藏方案
PHP中隐藏字符串内手机号和邮箱部分内容的实现方法
原始待处理字符串
(111) 222-3333
fgbv 1112223333
111 222-3333 fghgg
111-222-3333 jony13@gmail.com fghntyjn
(111)2223333
+11234567890
1-8002353551
123-456-7890 -Hello!
+1 - 1234567890
string
期望处理结果
(111) 222-3xxx fgbv 1112223xxx 111 222-3xxx fghgg 111-222-3xxx jonxxx@xxxil.com fghntyjn (111)2223xxx +11234567xxx 1-8002353xxx 123-456-7xxx -Hello! +1 - 1234567xxx string
实现代码
通过PHP的preg_replace结合正则表达式可完成需求:
$originalStr = <<<STR (111) 222-3333 fgbv 1112223333 111 222-3333 fghgg 111-222-3333 jony13@gmail.com fghntyjn (111)2223333 +11234567890 1-8002353551 123-456-7890 -Hello! +1 - 1234567890 string STR; // 隐藏手机号最后3位 $processedStr = preg_replace('/(\+?[()\d\s-]*\d)\d{3}/', '$1xxx', $originalStr); // 隐藏邮箱部分内容:用户名留前3位,主域名留最后2位 $processedStr = preg_replace('/(\w{3})\w+@\w*(\w{2})(\.\w+)/', '$1xxx@xxx$2$3', $processedStr); // 输出处理后的字符串 echo $processedStr;
代码说明
- 手机号处理:正则
/(\+?[()\d\s-]*\d)\d{3}/匹配所有带格式(含+号、括号、横杠、空格)的手机号,捕获除最后3位外的全部内容,将最后3位替换为xxx。 - 邮箱处理:正则
/(\w{3})\w+@\w*(\w{2})(\.\w+)/捕获用户名前3个字符、主域名最后2个字符及顶级域名,把用户名剩余部分和主域名前面部分替换为xxx,生成符合要求的隐藏格式。
内容的提问来源于stack exchange,提问作者Vitaly Govorin
相关产品推荐
相关产品推荐

