Задать вопрос
hummingbird
@hummingbird

Где в регулярном выражении ошибка?

Здравствуйте!

Этот код возвращает false:
if (regex_match("admin@gmail.com", regex("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$/")))
{
	return true;
}
else
{
	return false;
}


Где накосячил?
  • Вопрос задан
  • 257 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Stalker_RED
@Stalker_RED
UPD: На самом деле, всё дело в лишних слешах "/regexp_here/"

Ниже идет неправильный ответ, и поиск истины в комментариях

Вместо \\. используйте \.
https://regex101.com/r/kY0uS0/2

Но вообще, это не серьезно же. Эта штука не пропустит кучу валидных адресов.
DyUttOS.png

Примеры регулярок посолиднее
www.regular-expressions.info/email.html
stackoverflow.com/questions/46155/validate-email-a...

Вот вам "учебная" регулярка: \S+@\S+
По сути проверяется только наличие собачки и "каких-нибудь" символов перед и после нее.
https://regex101.com/r/cG7dW0/1
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
if (regex_match("admin@gmail.com", regex("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$")))
		cout << "match" << endl;
	else
		cout << "no match" << endl;
Ответ написан
Комментировать
@abcd0x00
Где накосячил?

Пропустит
a@..aa
Ответ написан
Комментировать
magalex
@magalex
Архитектор распределённых систем управления
Вам надо заменить \\. на \.
И в качестве общей рекомендации: для упрощения стоит использовать спецсимволы, например так "/^[\w.-]+@[\w.-]+\\.[a-z]{2,4}$/i", где \w эквивалентно [a-zA-Z0-9_], а флаг "i" указывает, что следует игнорировать регистр символов при поиске совпадений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы