【问题标题】:Regex to detect hyphen character正则表达式检测连字符
【发布时间】:2013-12-16 15:58:31
【问题描述】:

现场演示:http://regex101.com/r/wW6wC4


我正在尝试添加一个允许电子邮件地址的正则表达式:

asdf.asdf@test-dom-a.com

([\w+\.]+@[\w]{1,})(\.)([0-9a-zA-Z\.\-]{1,})
                                     ^---- Thought this would allow hyphens...

我在这里错过了什么?

【问题讨论】:

  • 它确实允许使用连字符,但您已对其进行了定位,因此它只允许在@ 之后的第一个. 之后使用连字符。

标签: c# regex asp.net-mvc email


【解决方案1】:

您的模式要求连字符出现在句号之后。试试这个:

([\w+.]+@[\w-]{1,})(\.)([0-9a-zA-Z.-]+)

Demonstration

或者更简单地说:

([\w+.]+@[\w.-]+)

虽然第二个模式不要求地址的第二部分包含句点。

Demonstration

【讨论】:

  • 这个正则表达式只匹配列表中的第一个电子邮件地址,没有别的。
  • @Serg 我已经在与您的问题完全相同的工具中对其进行了测试。它匹配所有输入模式。
  • @Serg 您第一次测试时可能没有打开g(全局)标志。这可以解释为什么它只匹配第一个实例。
【解决方案2】:

您的连字符代码出现在检查域名第一个句点之后 字符的段中。您需要将其添加到匹配块之前域名:

([\w+\.]+@[\w\-]{1,})(\.)([0-9a-zA-Z\.\-]{1,})
             ^^----  check here as well.

实际上,我会搜索更全面的电子邮件正则表达式 - 恕我直言,您拥有的那个似乎不够强大。

【讨论】:

    【解决方案3】:

    你的正则表达式:

    ([\w+\.]+@[\w]{1,})(\.)([0-9a-zA-Z\.\-]{1,})
    

    这将允许连字符仅作为最后一个字符。

    要允许它在任何地方使用:

    ^([\w+.-]+@[\w-])(\.)([0-9a-zA-Z.-])$
    

    或者只允许它之间使用(除了第一个和最后一个位置):

    ^[\w+.-]*@\w[\w-]*\.[\w-]*[0-9a-zA-Z.]+$
    

    工作演示:http://regex101.com/r/lQ1nV7

    【讨论】:

    • 这不是只允许最后出现一个字符吗?
    • 这不适用于他的示例案例。我认为您在错误的字符类中添加了-
    • $ 之前需要一个+
    • This will only allow hyphen as last character. 不是真的。
    • @anubhava 不,它允许连字符作为@ 之后的第一个. 之后的任何字符。如果有连字符,则不必是最后一个字符。
    【解决方案4】:

    您没有匹配“asd@fge.hj-kl”形式的字符串,您可以看到它不是您想要的。

    ([\w+\.]+)@([0-9a-zA-Z\.\-]{1,})\.com
    ([\w+\.]+)@([0-9a-zA-Z\.\-]{1,})\.([\w]{1,})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2018-10-13
      相关资源
      最近更新 更多