可能重复:
regexp部分隐藏电子邮件?
我正在编写一个隐藏电子邮件地址的脚本(因此test@domain.com变成了t〜~~ @ ~~~~~~.com).
按照这个问题的说明 - regexp部分隐藏电子邮件? - 我设法让它显示t ~~~ @ domain.com,但是在删除"域名"时遇到了问题.
这是我到目前为止(假设$ row-> email是"test@domain.com"): -
$string = preg_replace("(?<=.).(?=.*@)","~", $row->email);
$string = preg_replace("(?<=@).[a-zA-Z0-9]*","~", $string);
Run Code Online (Sandbox Code Playgroud)
但是,它返回的全部是t〜~~ @〜omain.com
我很困惑如何获得域的其余部分.想法?
理想的是,如果任何人都可以提供解决方案,那就变成t ~~~~~~~~~~~,那就是超级.
干杯
小智 5
它是 ..
"@"然后;.(任何字符:即"d"in "domain")然后;也就是说,匹配后替换的第一个也是唯一的第一个字符.@~
下列
(?<=@.)[a-zA-Z0-9-]*(?=(?:[.]|$))
Run Code Online (Sandbox Code Playgroud)
强制字符类与第一个"."(句点,".com"输入)或输入结束匹配.
需要注意的是,.移动内部的的(?<=@.)-Look隐藏条款,使其后跳过的第一个字母"@".我还在"-"字符类中添加了一个连字符(),因为它们在域名中是有效的(并非非常罕见).
此外,并非所有电子邮件地址都是琐碎的"a@b.c"形式,国际化域名(或IDN) 可以在未传输时以非punycode形式在本地表示(例如,不在限制性上下文中使用),但这是另一个主题.(在没有进一步说明的情况下[a-zA-Z0-9-]*,[^.]*由于IDN而更换可能更合适.)
| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |