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

C# 电子邮件的正则表达式#2,c#,asp.net,regex,C#,Asp.net,Regex,我有一个正则表达式,用于对照字符串检查它是否为电子邮件地址: @"^((([\w]+\.[\w]+)+)|([\w]+))@(([\w]+\.)+)([A-Za-z]{1,3})$" 这适用于我测试过的所有电子邮件地址,前提是“@”之前的位至少有四个字符长 作品: web1@domain.co.uk 不起作用: web@domain.co.uk 如何更改正则表达式以允许前缀少于4个字符???您可以使用此正则表达式作为替代: ^([a-z0-9_\.-]+)@([\da-z\.-]+)\.(

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

@"^((([\w]+\.[\w]+)+)|([\w]+))@(([\w]+\.)+)([A-Za-z]{1,3})$"
这适用于我测试过的所有电子邮件地址,前提是“@”之前的位至少有四个字符长

作品:

web1@domain.co.uk
不起作用:

web@domain.co.uk

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

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

^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
可以找到它的描述

关于您的正则表达式,开头部分
([\w]+\.[\w]+)+
强制电子邮件地址在开头有四个字符。修订本部分
将为您完成此工作。

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

^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
可以找到它的描述

关于您的正则表达式,开头部分
([\w]+\.[\w]+)+
强制电子邮件地址在开头有四个字符。修订本部分
将为您完成这项工作。

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个字符。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个以上的字符。您也可以尝试使用此字符

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

你也可以试试这个

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

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


在一个奇怪的有效电子邮件列表中检查您的正则表达式,您会发现正则表达式并不适合执行电子邮件验证任务。

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


再次查看您的正则表达式查看一系列奇怪的有效电子邮件,您会发现正则表达式并不适合执行电子邮件验证任务。

我建议不要使用正则表达式验证电子邮件(原因如下所述)

如果你不能发送一封确认邮件,在C#中一个好的选择是尝试创建一个邮件地址,并检查它是否失败

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

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

我建议不要使用正则表达式来验证电子邮件(出于此处概述的原因)

如果你不能发送一封确认邮件,在C#中一个好的选择是尝试创建一个邮件地址,并检查它是否失败

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

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

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

new MailAddress(email);
看起来并不像它认为的那么令人满意”a@a“作为一个有效的地址,事实上,它不会对几乎任何匹配regex“*.@.*”的字符串引发异常,例如,这显然是过于宽松的

new MailAddress("¦#°§¬|¢@¢¬|") 
不会引发异常

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

这个例子很令人满意


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

new MailAddress(email);
看起来并不像它认为的那么令人满意”a@a“作为一个有效的地址,事实上,它不会对几乎任何匹配regex“*.@.*”的字符串引发异常,例如,这显然是过于宽松的

new MailAddress("¦#°§¬|¢@¢¬|") 
不会引发异常

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

这个例子很令人满意



我刚刚运行了这两个示例,结果都是正确的。如果它失败了,那一定是因为另一个原因。它对我来说很好。很好:@Phil我没有否决它,但它可能会被否决。如果您使用的是C#,您应该尝试将电子邮件地址加载到System.Net.Mail.MailAddress中,以确定它是否是正确的电子邮件地址。@Phil-没问题-如果您将无效的电子邮件地址传递到MailAddress类中,MailAddress类将失败,因此我通常会这样做:MailAddress m;请尝试{m=新邮件地址(“test@test.com“”;}catch{抛出新异常(“无效电子邮件地址”);}-如果您使用的是asp.net,则可以将其连接到CustomValidator。这将告诉你,你有一个电子邮件地址,至少格式是有效的。如果它失败了,那一定是因为另一个原因。它对我来说很好。很好:@Phil我没有否决它,但它可能会被否决。如果您使用的是C#,您应该尝试将电子邮件地址加载到System.Net.Mail.MailAddress中,以确定它是否是正确的电子邮件地址。@Phil-没问题-如果您将无效的电子邮件地址传递到MailAddress类中,MailAddress类将失败,因此我通常会这样做:MailAddress m;请尝试{m=新邮件地址(“test@test.com“”;}catch{抛出新异常(“无效电子邮件地址”);}-如果您使用的是asp.net,则可以将其连接到CustomValidator。这会告诉你,你有一个电子邮件地址,至少格式是有效的。这不是一个好的,约翰+crap@gmail.com是一个非常有效的电子邮件,对我来说是独一无二的。为此,您可以使用以下正则表达式:
^([+a-z0-9\.-]+)@([\da-z\.-]+)\([a-z\.]{2,6})$
事实上,您缺少了很多有效的(尽管很奇怪)地址:更不用说可能比6个字符长的新TLD了,这不是一个好的,john+crap@gmail.com是一个非常有效的电子邮件,对我来说是独一无二的。为此,您可以使用以下正则表达式:
^([+a-z0-9\.-]+)@([\da-z\.-]+)\([a-z\.]{2,6})$
事实上,您缺少了很多有效的(尽管很奇怪)地址:更不用说可能比6个字符长的新TLD了,这将是
foo+bar@domain.museum
不是有效的电子邮件地址。电子邮件地址验证的正则表达式不好。@CodeCaster什么是“好”选项?@PhillHealey验证电子邮件地址的一种方法是