Регулярное выражение для проверки email

Помогите написать регулярное выражение (на C#) для проверки email, согласно следующим требованиям заказчика

  • наличие @ не на первом и не на последнем месте
  • наличие точки не на первом и не на последнем месте
  • наличие как минимум одной буквы или цифры перед @
  • наличие как минимум одной буквы или цифры после @

в интернете нашел следующее, но оно не работает с точками (2ой пункт)
^[\\w-\\.]+@[\\w-]+(\\.[\\w-]+)*\\.[a-z]{2,}$

сам плохо разбираюсь в написании рег.выражений, может кто-нибьудь подсказать в чем ошибка и как надо ее исправить?


Ответы (1 шт):

Автор решения: rotabor

Я использую такое выражение:

(^(?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.

→ Ссылка