【问题标题】:How to validate single letter domain names with regex?如何使用正则表达式验证单字母域名?
【发布时间】:2013-12-16 02:51:34
【问题描述】:

我正在尝试使用 Regex 为我的 C# MVC 模型创建验证规则。

[RegularExpression(@"(\w[-._+\w]*\w@\w{1,}.\w{2,3})", ErrorMessage = "* Email Address: Please enter a valid Email Address.")]
public virtual string EmailAddress { get; set; }

此正则表达式适用于除单字母域之外的所有内容。

这是一个实时预览,如何为这个用例创建一个正则表达式?

http://regex101.com/r/bA6gU9

【问题讨论】:

  • 因此,您的示例显示它与您想要的匹配,除了 +。 [\w+]+@[\w]{1,}+\.[\w]{1,} 不行吗?
  • 电子邮件地址验证除了一个点之外毫无意义。其他一切都是可选的,视情况而定。只需尝试发送电子邮件并查看它是否成功,您会更容易。现在,你会从那些偷窃他们的电子邮件地址的人那里得到一堆误报。
  • 您能解释一下您对有效电子邮件地址的标准吗?我不明白为什么电子邮件地址的句柄部分需要是单个单词字符,后跟字符集中的任意数量的字符,然后是单个单词字符。此模式似乎与您要求有效的电子邮件不匹配(例如,+sd@gmail.com,您声称应该有效,但根据您的标准无效)
  • 100% 同意你@JeroenVannevel,但是客户想要客户想要的。 :) 我必须尽我所能。

标签: c# javascript regex email


【解决方案1】:

根据你的例子,这会起作用:

[\w+.]+@\w+\.[\w.]+

http://regex101.com/r/zL2aI3

匹配:

  • tes.t@gmail.co.uk
  • q@q.com
  • a+2@gmail.com
  • +sd@gmail.com
  • a++abc@gmail.com

不匹配:

  • ·$(")@gmail.com
  • (((@q.com

说到底,你真正关心的只是有一个@ 和一个.。过去,just send it

【讨论】:

  • 这适用于 regex101 网站,但在我的实际 MVC 代码中它说:parsing "([\w+\.]+@[\w]{1,}+\.[\w]{1,})" - Nested quantifier +.
  • @Serg,试试下面的[\w+.]+@\w{1,}\.[\w.]{1,}
  • 哦,不,它在抱怨 {1,}+ -- 完全删除 {1,}
  • 简体:[\w+\.]+@\w+\.[\w\.]+
  • @r3mus 您不必转义字符类中的点。
【解决方案2】:

我希望这是您正在寻找的示例:

([\w-\.+]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})

我得到了所有需要匹配的匹配项,而不是最后两个匹配项。

【讨论】:

  • 这也将部分匹配@之前的下划线、破折号和点,以及部分@之后的 domain.com 和 name.domain.com 等域
【解决方案3】:

没有正则表达式的便宜又讨厌:

    try
    {
        new MailAddress(emailAddress);

    }
    catch (FormatException)
    {
        // not valid
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多