通过数据注释看到此代码用于电子邮件地址的正则表达式验证。
我无法解决双反斜杠的目的。
对我而言,电子邮件中必须有反斜杠 - 但我知道这不是它正在做的事情!!!
[RegularExpression(".+\\@.+\\..+", ErrorMessage="Please enter a valid email")]
答案 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#中的转义字符。替代方案可以是@".+\@.+\..+"