Weryfikacja adresu e-mail w aplikacji C # MVC 4: z lub bez użycia Regex [duplikat]

To pytanie ma już odpowiedź tutaj:

Mam aplikację internetową MVC 4 i muszę wprowadzić i zweryfikować niektóre adresy e-mail, bez wysyłania wiadomości e-mail na adres e-mail użytkownika.

Obecnie używam podstawowej weryfikacji e-mail regex z tym wzór:

[RegularExpression(@"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z",
        ErrorMessage = "Please enter correct email address")]

Chociaż jest to Walidacja adresów e-mail, przechodzi [email protected] jako poprawny adres e-mail. Na razie mam walidację, która wymaga symbols @ symbols . symbole, gdzie symbole mogą być numeryczne / Alfabetyczne oraz ._- .

Potrzebuję bardziej standardowej walidacji e-mail dla mojej aplikacji MVC 4. Jak mam to zrobić?

Author: abatishchev, 2013-12-05

6 answers

Potrzebujesz do tego wyrażenia regularnego. Zobacz Tutaj . Jeśli używasz. NET Framework4. 5, Możesz również użyć tego. Ponieważ jest zbudowany w. NET Framework 4.5. Przykład

[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
 69
Author: Ehsan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 12:53:01

Rozszerzenie na odpowiedź Ehsan ....

Jeśli używasz. Net framework 4.5, możesz mieć prostą metodę weryfikacji adresu e-mail za pomocą EmailAddressAttribute klasa w kodzie.

private static bool IsValidEmailAddress(string emailAddress)
{
    return new System.ComponentModel.DataAnnotations
                        .EmailAddressAttribute()
                        .IsValid(emailAddress);
}

Jeśli rozważasz REGEX, aby zweryfikować adres e-mail, przeczytaj:

Wiedziałem, jak zweryfikować adres e-mail, dopóki nie przeczytałem RFC przez Phil Haack

 19
Author: Habib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:17

Regex:

[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]

Lub możesz użyć po prostu:

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
 12
Author: whoah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 12:54:00

Dlaczego po prostu nie użyć EmailAttribute?

[Email(ErrorMessage = "Bad email")]
public string Email { get; set; }
 3
Author: dav_i,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 12:53:22

nie.

Użyj regex do szybkiego sprawdzania zdrowego rozsądku, coś w rodzaju .@.., ale prawie wszystkie langauges / frameworki mają lepsze metody sprawdzania adresu e-mail. Użyj tego.

Jest możliwe aby zweryfikować adres e-mail za pomocą wyrażenia regularnego, ale jest to długie Wyrażenie regularne. Bardzo długi.
I w końcu nie będziesz mądrzejszy. Będziesz wiedział tylko, że format jest prawidłowy, ale nadal nie wiesz, czy jest to aktywny adres e-mail. Na jedynym sposobem, aby się dowiedzieć, jest wysłanie e-maila z potwierdzeniem.

 1
Author: SQB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 17:16:37

Zaskakujące jest pytanie walidacji adresu e-mail ciągle pojawia się na tak!

Jedno często wymieniane praktyczne rozwiązanie znajdziesz tutaj: Jak znaleźć lub zweryfikować adres e-mail.

Fragment:

Zaletą mojego wyrażenia regularnego powyżej jest to, że pasuje do 99% obecnie używane adresy e-mail. Cały adres e-mail, który pasuje, może być obsługiwane przez 99% wszystkich programów pocztowych tam. Jeśli jesteś Szukam aby uzyskać szybkie rozwiązanie, wystarczy przeczytać następny akapit. Jeśli chcesz poznać wszystkie kompromisy i uzyskać wiele alternatyw dla wybierz z, Czytaj dalej.

Patrz ta odpowiedź na SO do omówienia meritum artykułu pod powyższym linkiem. W szczególności komentarz z dnia 2012-04-17 brzmi:

Do wszystkich skarżących: po 3 godzinach eksperymentowania z wszystkimi rozwiązaniami oferowana w tej gigantycznej dyskusji, jest to jedyna dobra java regex rozwiązanie mogę znaleźć. Żaden z rfc5322 nie działa na Java regex.

 0
Author: DavidRR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:05