【问题标题】:Regex to accept one or more characters before @正则表达式在 @ 之前接受一个或多个字符
【发布时间】:2014-03-10 20:44:57
【问题描述】:

我有以下电子邮件正则表达式验证。

([a-zA-Z0-9_\-\.]+)([a-zA-Z0-9])@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})

当我测试它不允许在 @.e.g t@stackoverflow.com 之前使用单个字符的电子邮件,但它允许在 @ 之前使用 2 个字符。例如 th@stackoverflow.com .所以请有人可以显示我哪里出错了? 提前致谢

【问题讨论】:

标签: c# regex email-address


【解决方案1】:

第二组应该有允许 0 个字符的量词。这似乎是resolve 的问题:

...([a-zA-Z0-9]*)@...

更新。正如@Nyx 在评论中指出的那样,以上内容将匹配address.@themail.com。如果要避免这种情况,您可以将zero or more 量词应用于第一组,将one or more 应用于第二组:

([a-zA-Z0-9_\-\.]*)([a-zA-Z0-9]+)@...

【讨论】:

  • 我认为 * 应该应用于第一组,否则你可以输入 me.@gmail.com 和 .在@之前。
【解决方案2】:

使用这个正则表达式:

[a-zA-Z0-9_\-\.].*@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})

但验证正则表达式是个坏主意。

为什么?

查看文章:http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx

【讨论】:

    【解决方案3】:

    由于 + 的原因,第一部分需要 1 个或多个字符:

    ([a-zA-Z0-9_\-\.]+)
    

    还有第二个 1 字符:

    ([a-zA-Z0-9])
    

    所以最终会产生 2 个或更多字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-16
      • 2022-07-23
      • 2013-05-22
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      相关资源
      最近更新 更多