Регулярное выражение для проверки email
Помогите написать регулярное выражение (на C#) для проверки email, согласно следующим требованиям заказчика
- наличие @ не на первом и не на последнем месте
- наличие точки не на первом и не на последнем месте
- наличие как минимум одной буквы или цифры перед @
- наличие как минимум одной буквы или цифры после @
в интернете нашел следующее, но оно не работает с точками (2ой пункт)
^[\\w-\\.]+@[\\w-]+(\\.[\\w-]+)*\\.[a-z]{2,}$
сам плохо разбираюсь в написании рег.выражений, может кто-нибьудь подсказать в чем ошибка и как надо ее исправить?
Ответы (1 шт):
Я использую такое выражение:
(^(?i)([a-z0-9-]+\.)*[a-z0-9-]+@([a-z0-9-]+\.)*[a-z0-9-]+\.[a-z]{2,}+$)|(^$)
При желании это выражение можно дополнить для соответствия стандарту. Поскольку адрес не чувствителен к регистру, заглавные буквы не включены, проверяемый адрес нужно привести к нижнему регистру.
Регулярные выражения можно проверить онлайн на различных сайтах, один из которых regex101. В меню слева нужно выбрать `.NET 7.0 (C#). Справа есть расшифровка регулярного выражения. Проверьте своё, почитайте расшифровку, может, поймёте, где ошибка.
[\w-\.]+
- или словный символ, или точка. А нужно так ([\w-]+\.)*[\w-]+
- ((как минимум один словный символ, точка) - 0 и больше фрагментов)(как минимум один словный символ).
P. S. Нашёт ещё вот такую штуку "StringExtensions.IsEmail(String) Method" из Windows Community Toolkit.