C# Regex电子邮件,后加2个字符@
我正在使用ASP.NET MVC 3 C#,我有一个正则表达式: @“([a-zA-Z0-9%.-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4})+” 它几乎适用于所有情况,除非@后面的字符少于2个 例: stackoverflow@ab.com<有效的电子邮件C# Regex电子邮件,后加2个字符@,c#,regex,asp.net-mvc,validation,data-annotations,C#,Regex,Asp.net Mvc,Validation,Data Annotations,我正在使用ASP.NET MVC 3 C#,我有一个正则表达式: @“([a-zA-Z0-9%.-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4})+” 它几乎适用于所有情况,除非@后面的字符少于2个 例: stackoverflow@ab.com
stackoverflow@a.com<电子邮件无效,但我的正则表达式不起作用 我在论坛上找不到类似的东西,我对regex几乎一无所知。 有人能帮忙吗?谢谢
(很抱歉英语不好)。您没有转义RegExp中的句点(.),因此它们基本上是任意字符占位符
电子邮件地址的域部分(在@之后)只能包含字母、数字、句点和连字符。第一个和最后一个字符以及句点前后的字符必须是字母或数字这可能因为新的外来字符而发生了更改。您没有转义RegExp中的句点(.),因此它们基本上是任意字符占位符 电子邮件地址的域部分(在@之后)只能包含字母、数字、句点和连字符。第一个和最后一个字符以及句点前后的字符必须是字母或数字这可能因为新的外来字符而改变。 RFC 5322:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
| "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")
@ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
| \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:
(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)
\])
RFC 5322:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
| "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")
@ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
| \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:
(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)
\])
因为这是C#你可以创建自己的属性,让它看起来更吸引人
using System.ComponentModel.DataAnnotations;
class EmailValidationAttribute : RegularExpressionAttribute
{
public EmailValidationAttribute()
: base("^[a-zA-Z0-9_\\+-]+(\\.[a-zA-Z0-9_\\+-]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.([a-zA-Z]{2,4})$") { }
}
class EmailTest
{
[EmailValidation(ErrorMessage="Please Enter a valid email address")]
public String Email { get; set; }
}
这应该考虑到大多数情况,您也可以将它与Robert p的答案结合起来,以获得更好的正则表达式,但就我所见,它没有考虑人们用大写字母写电子邮件。因为这是C,所以您始终可以创建自己的属性,使其看起来更具吸引力
using System.ComponentModel.DataAnnotations;
class EmailValidationAttribute : RegularExpressionAttribute
{
public EmailValidationAttribute()
: base("^[a-zA-Z0-9_\\+-]+(\\.[a-zA-Z0-9_\\+-]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.([a-zA-Z]{2,4})$") { }
}
class EmailTest
{
[EmailValidation(ErrorMessage="Please Enter a valid email address")]
public String Email { get; set; }
}
这应该考虑到大多数情况,您也可以将其与Robert p的答案结合起来,以获得更好的正则表达式,但就我所见,它没有考虑到人们用大写字母写电子邮件。存在单字母域:这对于
堆栈也是失败的+overflow@example.com
根据您的要求,您似乎正在寻找@“(a-zA-Z0-9%。-]+@[a-zA-Z0-9.-]{2,}.[a-zA-Z]{2,4})+”
存在单字母域:这对于堆栈也是失败的+overflow@example.com
根据你的要求,如果你仍然问为什么,你似乎在寻找@”([a-zA-Z0-9%.\u-]+@[a-zA-Z0-9.-]{2,4}.[a-zA-Z]{2,4})+“
x@a.com如果失败,解释如下。。。正则表达式与地址的最后4个字符(即“.com”)匹配,因为模式末尾的字符范围为2-4个,而模式中的最后一个点与“a”匹配,这使得“+”模式无法找到任何内容,并且它至少需要一个字符,因此模式无法匹配。如果您仍然问为什么x@a.com失败,解释如下。。。正则表达式与地址的最后4个字符(即“.com”)匹配,因为模式末尾的字符范围为2-4个,而模式中的最后一个点与“a”匹配,这使得“+”模式无法找到任何内容,并且它至少需要一个字符,因此模式无法匹配。