如何在Regex的电子邮件中只允许双反斜杠?

时间:2015-07-05 10:31:59

标签: c# regex email

我想在我们的电子邮件中的\\符号之前接受/@,例如用户名。 以下是我们正在使用的当前正则表达式:

^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

我只想允许双反斜杠的原因是我希望在使用此正则表达式验证字符串是否为有效用户名时对字符串进行转义。

有效和无效的用例:

  1. hello\\world@email.com 有效
  2. hello\world@email.com 无效
  3. hello/world@gmil.com 有效
  4. hello@email.com 有效
  5. 我尝试了以下正则表达式,但它也允许单反斜杠:

    ^([\w-(\\\\)/\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

3 个答案:

答案 0 :(得分:1)

它应该如何转义取决于你使用的语言,但是你去了:

^(([-\w\/\.]|\\\\)+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

See it in action

我所做的只是在第一组\/中添加正斜杠,并添加两个反斜杠作为替代|\\\\

<小时/> 这是C#转义版本:

^(([-\\w\\/\\.]|\\\\\\\\)+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$

答案 1 :(得分:1)

试试这个..

^([\w]+)((\\\\)*(/)*(\.)*)([\w]*)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

答案 2 :(得分:0)

您需要在开始时添加否定前瞻。

^(?![^@]*?(?:\\\\\\|(?<!\\)\\(?!\\)))([\w-\\\\/.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

DEMO

@"(?m)^(?![^@]*?(?:\\\\\\|(?<!\\)\\(?!\\)))([\w-\\\\/.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"