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验证电子邮件地址的一种方法是