电子邮件屏蔽的正则表达式

时间:2017-03-24 15:15:22

标签: java regex regex-lookarounds

我正在尝试编写正则表达式来屏蔽电子邮件地址。示例如下。

  

输入:john.doe@example.en.com

     

输出:j ******* @ e *********。com

我尝试过以下操作,但我似乎无法使其正常工作。

  

正则表达式:(?<=.).(?=[^@]\*?@)

     

输出:J- ******* @ example.en.com

     

正则表达式:(?<=.).(?=[^@]\*?)(?=[^\.]\*?\.)

     

输出:J。****************** COM

任何帮助将不胜感激。 demo

2 个答案:

答案 0 :(得分:5)

使用各种屏蔽电子邮件解决方案进行更新

  • foo@bar.comf**@b**.com (当前问题) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")(请参阅the regex demo

  • foo@bar.comf**@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")(请参阅the regex demo

  • foo@bar.comf*o@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")(请参阅the regex demo

  • foo@bar.comf**@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")(请参阅the regex demo

  • foo@bar.comf*o@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")(请参阅the regex demo

原始答案

如果您无法使用基于代码的解决方案,则可以使用

s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")

请参阅regex demo

它的作用

  • (?<=.)[^@](?=[^@]*?@) - 除了@之外的其他字符([^@]),前面有任何一个字符((?<=.)),后跟任何0或更多字符@最多@(?=[^@]*?@)
  • | - 或
  • (?:(?<=@.)|(?!^)\\G(?=[^@]*$)) - 匹配字符串中前缀为@的位置以及任何字符((?<=@.))或(|)上一次成功匹配的结束( (?!^)\\G)后面跟着@ uo以外的任何0 +字符到字符串末尾((?=[^@]*$)
  • . - 任何一个字符
  • (?=.*\\.) - 后面跟着字符串中最后一个.符号的0个字符。

答案 1 :(得分:0)

如果您不需要与原始字符串具有相同字符数的掩码(更匿名),那么这个怎么样:

@app.route('/process', methods=['POST'])
def process():

    email = request.form['email']
    password = request.form['password']

    if password and email:

        user = Db().login(email, password)

        if user:
            session['user'] = user
            session.modified = True
            return render_template("home.html", user='user')

    return jsonify({'error' : 'Incorrect username and password.'})

例如,如果将匹配项替换为(?<=^.)[^@]*|(?<=@.).*(?=\.[^.]+$) ,则结果为:

***