DataAnnotations中用于电子邮件验证的C#Regular Expression - 双反斜杠

时间:2011-01-20 15:48:53

标签: c# regex asp.net-mvc-2

通过数据注释看到此代码用于电子邮件地址的正则表达式验证。

我无法解决双反斜杠的目的。

对我而言,电子邮件中必须有反斜杠 - 但我知道这不是它正在做的事情!!!

 [RegularExpression(".+\\@.+\\..+",   ErrorMessage="Please enter a valid email")]

4 个答案:

答案 0 :(得分:5)

反斜杠是C#和正则表达式中的转义字符。因此,在C#中,"\\"等于单个反斜杠。然后使用生成的反斜杠来转义.,这是一个元字符,因此必须进行转义。我不知道为什么@会被转义。

答案 1 :(得分:4)

对于MVC2模式

using System.ComponentModel.DataAnnotations;

public class EmailValidationAttribute: RegularExpressionAttribute
{    
    public EmailValidationAttribute() : base(@"^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-zA-Z0-9]{1}[a-zA-Z0-9\-]{0,62}[a-zA-Z0-9]{1})|[a-zA-Z])\.)+[a-zA-Z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$")
    {

    }
}

然后使用

[EmailValidation(ErrorMessage="Not a valid Email Address")]
public string Email { get; set; }

这将完美地运作..

答案 2 :(得分:3)

在正则表达式中转义时,某些字符具有特殊含义。例如\ d表示一个数字。

在C#中,反斜杠具有类似的功能。例如\ n表示换行符。为了在C#中获得字面反斜杠,你必须使用反斜杠来逃避它。两个一起与字面反斜杠相同。

C#有一种方法可以将字符串表示为文字,因此不使用反斜杠字符 - 在字符串前加上@。

答案 3 :(得分:0)

双反斜杠是必需的,因为反斜杠是C#中的转义字符。替代方案可以是@".+\@.+\..+"