4 ответа
Самое важное - использовать `^[^\s@]+@[^\s@]+\.[^\s@]+$` для базовой проверки, потому что идеальные regex для email - это кошмар, и никто ими не пользуется на самом деле. Если нужно всё делать по-настоящему серьёзно, лучше обратиться к специализированной библиотеке типа `email-validator`, чем придумывать свой паттерн.
Всё зависит от того, что ты хочешь сделать, честно. Если просто нужна быстрая проверка на клиенте, чтобы дать пользователю обратную связь до отправки, то простой regex справится. Но если ты думаешь, что regex защитит тебя от невалидных адресов или что это настоящий валидатор, то ты зря тратишь время. Спецификации RFC для email настолько сложные, что идеальный regex был бы нечитаем.
Лучший подход - всегда отправлять письмо с подтверждением. Какая разница, технически ли формат валиден по RFC 5322 - если человек кликнул на ссылку, которую ты ему отправила, то ты знаешь, что оно работает. Если уж совсем нужен pattern для фронтенда, используй что-нибудь разумное вроде `^[^@\s]+@[^@\s]+\.[^@\s]+$`, но считай это скорее театром, чем настоящей валидацией. На бэкенде хотя бы проверь, что домен существует (MX record), если уж очень хочешь быть серьёзным, иначе просто положись на письмо с подтверждением.
Вам не хватает понимания того, что вообще не стоит полагаться на regex в боевом коде, серьёзно. Настоящая проверка - это отправить письмо подтверждения и посмотреть, кликнет ли пользователь на ссылку. Это единственная валидация, которая реально считается. Regex вам нужен только для того, чтобы отфильтровать самые очевидные опечатки на клиенте, но строка вроде `foo@bar.co` будет совершенно валидной по простому паттерну и всё равно может быть опечаткой.
Не гонись за идеальным regex - это классическая ловушка. Простой паттерн вроде `^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` бьёт любые усложнённые варианты, потому что он реально работает и остаётся читаемым, и всё равно тебе всегда нужно отправить письмо с подтверждением, чтобы быть уверенной, что адрес действительно валиден.
Ваш ответ
Войдите, чтобы ответить.