簡體   English   中英

DataAnnotations中用於電子郵件驗證的C#Regular Expression - 雙反斜杠

[英]C# Regular Expression for email validation in DataAnnotations - Double backslash

通過數據注釋看到此代碼用於電子郵件地址的正則表達式驗證。

我無法解決雙反斜杠的目的。

對我而言,電子郵件必須有反斜杠 - 但我知道這不是它正在做的事情!

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

反斜杠是C#和正則表達式中的轉義字符。 因此,在C#中, "\\\\"等於單個反斜杠。 然后使用生成的反斜杠來逃避. ,這是一個元字符,因此必須逃脫。 我不知道為什么@被逃脫了。

對於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; }

這將完美地工作..

在正則表達式中轉義時,某些字符具有特殊含義。 例如\\ d表示一個數字。

在C#中,反斜杠具有類似的功能。 例如\\ n表示換行符。 為了在C#中獲得字面反斜杠,你必須使用反斜杠來逃避它。 兩個一起與字面反斜杠相同。

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

雙反斜杠是必需的,因為反斜杠是C#中的轉義字符。 另一種選擇可能是@".+\\@.+\\..+"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM