Хачатур

Хачатур 

Автор

10 423subscribers

132posts

Showcase

10

e-mail валидатор

Посмотрев на валидаторы в сети, понял, что нужно пилить свой...
Как обычно, простой, короткий, надёжный:
bool ValidEmail(string email) => new Regex(^[\w.-]+@\w+\.[a-z]+(\.[a-z]+)*$, RegexOptions.IgnoreCase).IsMatch(email);
И да, кто-то скажет, что тут запрет на кавычки и собаку, которые по стандарту очень даже могут быть дополнительно в e-mail и этому кому-то Я скажу, что ни GMail, ни Яндекс, ни, прости господи, MailRu не дают выдумывать почты подобные этим: myn'a'm@e@site.com, поэтому валидатор, которым делюсь с Вами можете спокойно использовать 👍
Привет, Хачатур! Скажи, пожалуйста, а для чего указывать и \w, и \d, и \., если \w, помимо английского алфавита, уже включает в себя и цифры от 0 до 9, и подчёркивание? Смотрел оба твоих видео по регулярным выражениям, и, если честно, не до конца понимаю всё равно.
Андрей, привет 🖐
Если указать только \w и +, то может так получиться, что попавшаяся, например, буква будет достаточной для соответствия. Но если там будут и буквы и цифры, то мы берём их отдельно в скобки и уже к ним относим знак +. То есть до знака @ может быть не просто [буква или цифра], а и [буква и/или цифра]. То же касается знака точки и нижнее подчёркивание. Нельзя просто так сказать \w, ибо не факт, что будут только буквы. К этой логике просто нужно привыкнуть.
Здравствуйте, Хачатур!
Перечитал ответ, но все-равно не очень понятно, почему был избран данный подход, ведь (\w|\.|-) и (\w|\d|\.|_|-) работают одинаковым образом, а именно: оба паттерна позволяют создать "1@example.com", "a@example.com", "_@example.com", "-@example.com" и даже "-_1a@example.com"
Дело в том что \w это массив из символов, который включает в себя a-z, A-Z, 0-9, _, и если символ попадает в этот массив - он соответствует паттерну, в этом случае порядок символов в группе не важен: главное чтобы введенные символы входили в этот массив (эквивалент оператору OR).
Это выражение можно еще сократить, если учесть что:
+ это эквивалент {1,}
\w уже содержит в себе []
\w уже содержит в себе \d и _
можно избежать знаков | и экранирования символов если использовать массив
Вот что получилось у меня: ^([\w.-])+@(\w)+\.\w+\.?\w*$
Оба выражения выдавали одинаковые результаты в вышеуказанных примерах.
Хачатур Аванесян, по-моему эти ребята со stack overflow рискуют разорвать пространственно-временной континуум своими валидаторами. Опасная штука, regex..
Андрей, во-во =))
Так же хочу отметить присутствие групп, но выражение не позволяет получить всю группу, только последний символ.
Решается это внесением квантификатора в группу:
было (\w)+ стало (\w+)
Таким образом мы получаем еще и полезное в плане парсинга выражение:
^([\w.-]+)@(\w+)\.\w+\.?\w*$
Andrey Diamond, похвально, но чуть выше написал, что проскочило 2 email, которые не должны были. В любом случае похвально, что перепроверяете и совершенствуете. Я лично вообще торчу от regex =)
Subscription levels3

Boosty

$11 per month
💎 Доступ ко всем материалам
за всё время
🤖 Доступ ко всем нейронкам: deepfake, музыкальным, голосовым
💥 Доступ к авторским стилям и настройкам
💥 Доступ к авторским конфигам и скриптам
😎 Доступ к закрытым и скрытым областям Discord, к которым не имеют доступ простые люди
+ chat

Boosty +ПОДДЕРЖКА АВТОРА

$16.5 per month
+ Этот уровень подписки даёт возможность сильнее поддержать автора.
+ chat

Boosty +ПОДДЕРЖКА АВТОРА+

$31 per month
+ Этот уровень подписки даёт возможность значительно поддержать автора.
+ chat
Go up