【问题标题】:How to allow only double backslash in email with Regex?如何使用正则表达式在电子邮件中只允许双反斜杠?
【发布时间】:2015-07-05 10:31:59
【问题描述】:

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

^([\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 有效

我尝试了以下正则表达式,但它也允许使用单个反斜杠:

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

【问题讨论】:

  • 只在 at 符号之前?
  • @AvinashRaj:问得好。是的,没错!
  • hello\/world@email.com 有效吗?
  • C# 用另一个 `` 转义反斜杠所以不行。
  • Tarik 检查我的回答 .. 它对我有用 ..

标签: c# regex email


【解决方案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})(\\]?)$

【讨论】:

    【解决方案2】:

    试试这个..

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

    【讨论】:

      【解决方案3】:

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

      ^(?![^@]*?(?:\\\\\\|(?<!\\)\\(?!\\)))([\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})(\]?)$"
      

      【讨论】:

      • 也匹配 hello\/world@email.com
      • 它可以工作,但不能使用 C# 语言。我应该指定我使用 C# 的事实。
      • @AvinashRaj:不是我,而是加了+1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多