【问题标题】:Regular expression to mask email except the three characters before the domain除域前三个字符外,用于屏蔽电子邮件的正则表达式
【发布时间】:2020-10-11 05:28:09
【问题描述】:

我正在尝试通过以下不同方式屏蔽电子邮件地址。

  1. 屏蔽除前三个字符之外的所有字符,并且那些字符跟在 @ 符号之后。 这个表达式很好用。

    (?

    abcdefgh@gmail.com -> abc*****@gmail.com

  2. 屏蔽除 @ 符号前的最后三个字符之外的所有字符。

    示例:abcdefgh@gmail.com -> *****fgh@gmail.com

    我不确定如何检查 @ 并进行反向匹配。

有人能指点一下吗?

【问题讨论】:

  • 如果邮箱是ok@example.com怎么办?是否应该显示未屏蔽?

标签: java regex email


【解决方案1】:

也许你可以做一个积极的前瞻:

.(?=.*...@)

在线查看Demo

  • . - 除换行符以外的任何字符。
  • (?=.*...@) - 除换行符以外的零个或多个字符的正向前瞻,后跟除换行符和 @ 以外的三个字符。

【讨论】:

    【解决方案2】:

    您可以使用negated character class [^\s@] 匹配除@ 之外的非空白字符。然后断言右边是 3 次否定字符类,然后匹配 @ 符号。

    在替换中使用*

    [^\s@](?=[^@\s]*[^@\s]{3}@)
    
    • [^\s@] 否定字符类,匹配除@ 之外的非空白字符
    • (?= 正向前瞻,断言右边是
      • [^@\s]* 匹配 0+ 次非空白字符,@ 除外
      • [^@\s]{3} 匹配 3 次非空白字符,@ 除外
      • @匹配@
    • ) 关闭前瞻

    Regex demo


    如果电子邮件地址中只能有一个 @,您可以例如在正向后视中使用有限量词:

    (?<=(?<!\S)[^\s@]{0,1000})[^\s@](?=[^@\s]*[^@\s]{3}@[^\s@]+\.[a-z]{2,}(?!\S))
    

    Regex demo

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      相关资源
      最近更新 更多