Регулярное выражение C # для проверки электронной почты в DataAnnotations - Двойная обратная косая черта - PullRequest
3 голосов
/ 20 января 2011

Видел этот код для регулярного выражения проверки адреса электронной почты с помощью аннотаций данных.

Я не могу понять цель двойной обратной косой черты.

Мне говорят, что в письме должна быть обратная косая черта - но я знаю, что это не то, что он делает !!!

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

Ответы [ 4 ]

5 голосов
/ 20 января 2011

Обратная косая черта является escape-символом как в C #, так и в регулярном выражении. Таким образом, в C # "\\" равно одной обратной косой черте. Результирующий обратный слеш затем используется для экранирования ., который является метасимволом и поэтому должен быть экранирован Однако я не знаю, почему @ сбежал.

4 голосов
/ 20 декабря 2011

Для MVC2 Pattern

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

Это будет отлично работать

3 голосов
/ 20 января 2011

Некоторые символы имеют особое значение при экранировании в регулярном выражении.Например, \ d означает число.

В C # обратная косая черта имеет аналогичную функцию.Например, \ n означает перевод строки.Чтобы получить буквальную обратную косую черту в C #, вы должны избежать ее ... с обратной косой чертой.Два вместе - это то же самое, что буквальная обратная косая черта.

C # позволяет обозначать строку как литерал, поэтому символы обратной косой черты не используются - добавьте строку с @.

0 голосов
/ 20 января 2011

Двойная обратная косая черта обязательна, потому что обратная косая черта является символом Escape в C #.Альтернативой может быть @".+\@.+\..+"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...