我正在尝试编写正则表达式来掩盖电子邮件地址。下面的例子。
input: [电子邮件受保护]
输出:j*****@e*********.com
我已经尝试过以下方法,但我似乎无法使其正常工作。
regex:(?<=.).(?=[^@]\*?@)
输出:j*****@example.en.com
regex:(?<=.).(?=[^@]\*?)(?=[^\.]\*?\.)
输出:j********************.com
任何帮助,将不胜感激。demo
更新各种屏蔽电子邮件解决方案
-
[email protected]
⇒ f**@b**.com
(当前问题)-s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
(see 正则表达式演示)
-
[email protected]
⇒ f**@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(see 正则表达式演示)
-
[email protected]
⇒ f*o@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(see 正则表达式演示)
-
[email protected]
⇒ f**@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(see 正则表达式演示)
-
[email protected]
⇒ f*o@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(see 正则表达式演示)
原答案
如果您无法使用基于代码的解决方案,您可以使用
s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
See the 正则表达式演示
它能做什么:
-
(?<=.)[^@](?=[^@]*?@)
- 除@
([^@]
) 前面有任何单个字符 ((?<=.)
) 后跟任何 0 个或更多字符,除了@
最多一个@
((?=[^@]*?@)
)
-
|
- or
-
(?:(?<=@.)|(?!^)\\G(?=[^@]*$))
- 匹配字符串中前面带有的位置@
和任何字符((?<=@.)
) or (|
) 上一次成功匹配的结束 ((?!^)\\G
) 后跟任何 0+ 字符,除了@
uo 到字符串末尾 ((?=[^@]*$)
)
-
.
- 任何单个字符
-
(?=.*\\.)
- 后面跟有 0 个以上字符,直到最后一个.
字符串中的符号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)