电子邮件#2的正则表达式

时间:2013-02-12 13:36:16

标签: c# asp.net regex

我有一个正则表达式,我用来检查一个字符串,看看它是否是一个电子邮件地址:

@"^((([\w]+\.[\w]+)+)|([\w]+))@(([\w]+\.)+)([A-Za-z]{1,3})$"

这适用于我测试的所有电子邮件地址,只要“@”之前的位至少有四个字符。

使用:

web1@domain.co.uk

不起作用:

web@domain.co.uk

如何更改正则表达式以允许少于4个字符的前缀?

6 个答案:

答案 0 :(得分:3)

用于电子邮件验证的asp.net mvc帐户模型中使用的“标准”正则表达式如下:

@"^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$"

在@

之前允许1个以上的字符

答案 1 :(得分:2)

我认为检查有效电子邮件地址的最佳方法是让用户输入两次,然后向他发送电子邮件,并质疑他是否使用验证链接收到了这封邮件。

再次检查您的正则表达式是否有一个奇怪的有效电子邮件addresses列表,您将看到正则表达式不适用于电子邮件验证任务。

答案 2 :(得分:0)

您可以使用此正则表达式作为替代方法:

^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$

可以找到其描述here

关于正则表达式,起始部分(([\w]+\.[\w]+)+)强制电子邮件地址在开头有四个字符。修改这一部分 会为你做的工作。

答案 3 :(得分:0)

我建议不要使用正则表达式验证电子邮件(由于此处列出的原因)http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/

如果您无法发送确认电子邮件,C#中的一个好选择是尝试创建MailAddress并检查它是否失败。

如果您使用的是ASP.NET,则可以使用CustomValidator来调用此验证方法。

    bool isValidEmail(string email)
    {
        try
        {
            MailAddress m = new MailAddress(email);
            return true;
        }
        catch
        {
            return false;
        }
    }

答案 4 :(得分:0)

验证答案中使用的小技巧,即捕获

上的例外
new MailAddress(email);

似乎不太令人满意,因为它认为“a @ a”是一个有效的地址,实际上它几乎不会引起任何匹配正则表达式“*。@。*”的字符串的异常,这显然过于宽容例子

new MailAddress("¦#°§¬|¢@¢¬|") 

不会引发异常。

因此我显然会选择正则表达式匹配

这个例子非常令人满意

https://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx

答案 5 :(得分:-1)

您也可以试试这个

^[a-zA-Z0-9._-]*@[a-z0-9._-]{2,}\.[a-z]{2,4}$