电子邮件屏蔽的正则表达式
Posted
技术标签:
【中文标题】电子邮件屏蔽的正则表达式【英文标题】:Regular expression for email masking 【发布时间】:2017-08-17 14:33:32 【问题描述】:我正在尝试编写一个正则表达式来屏蔽电子邮件地址。下面的例子。
输入:john.doe@example.en.com
输出:j*********@e*********.com
我尝试了以下方法,但似乎无法正常工作。
正则表达式:
(?<=.).(?=[^@]\*?@)
输出:j*******@example.en.com
正则表达式:
(?<=.).(?=[^@]\*?)(?=[^\.]\*?\.)
输出:j******************.com
任何帮助将不胜感激。 demo
【问题讨论】:
试试.replaceAll("(?<=.).(?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$))(.)(?=.*\\.)", "*")
(注意此评论中的垃圾字符,请勿从此处复制/粘贴)
正则表达式的使用对您来说有多重要?恕我直言.indexOf("@")
和一些“子字符串复制粘贴”可能会在几个月内变得更易读。
@DerMike 这不重要。我只是觉得我需要使用正则表达式。
@Wiktor 正则表达式有效。如果您将其作为答案提交,我将接受它。谢谢!
【参考方案1】:
更新各种屏蔽电子邮件解决方案
foo@bar.com
⇒ f**@b**.com
(当前问题)-s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
(见the regex demo)
foo@bar.com
⇒ f**@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(见the regex demo)
foo@bar.com
⇒ f*o@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(见the regex demo)
foo@bar.com
⇒ f**@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(见the regex demo)
foo@bar.com
⇒ f*o@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(见the regex demo)
原答案
如果您不能使用基于代码的解决方案,您可以使用
s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
见regex demo
它的作用:
(?<=.)[^@](?=[^@]*?@)
- 除@
([^@]
) 以外的任何字符,前面有任何单个字符 ((?<=.)
),后跟除@
之外的任何 0 个或多个字符,直到 @
(@ 987654350@)
|
- 或
(?:(?<=@.)|(?!^)\\G(?=[^@]*$))
- 匹配字符串中以 @
开头的位置和任何字符 ((?<=@.)
) 或 (|
) 上一个成功匹配 ((?!^)\\G
) 的结尾,其后跟任何 0+ @
uo 以外的字符到字符串末尾 ((?=[^@]*$)
)
.
- 任何单个字符
(?=.*\\.)
- 后跟任何 0+ 个字符,直到字符串中的最后一个 .
符号。
【讨论】:
对于大多数电子邮件地址,\S+@\S+
会不会也一样?
@Robert:我不相信你可以用它来屏蔽。您可以使用它来提取大部分电子邮件。
@WiktorStribiżew,我们可以将 f@b.com 发送至*@*.**m
的任何示例
@kakabali s.replaceAll("[^@.](?!$)", "*")
@user2494863 如果要屏蔽第一个点之前的域部分,请使用(?<=.)[^@\n](?=[^@\n]*?[^@\n]@)|(?:(?<=@.)|(?!^)\G(?=[^@\n]*$))[^.](?!\.)
,请参阅demo。【参考方案2】:
如果您不需要与原始字符串具有相同字符数的掩码(更匿名),这个怎么样:
(?<=^.)[^@]*|(?<=@.).*(?=\.[^.]+$)
例如,如果您将匹配项替换为 ***
,则结果将是:
j***@e***.com
【讨论】:
以上是关于电子邮件屏蔽的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript之基础-10 JavaScript 正则表达式(概述定义正则RegExp对象用于模式匹配的String方法)