Я пытаюсь создать регулярные выражения, которые будут фильтровать действительные электронные письма, используя PHP, и столкнулись с проблемой, которая противоречит тому, что я понимаю о регулярных выражениях. Вот код, который я использую.
if (!preg_match('/^[-a-zA-Z0-9_.]+@[-a-zA-Z0-9]+.[a-zA-Z]{2,4}$/', $string)) {
return $false;
}
Теперь из материалов, которые я исследовал, это должно позволять содержанию до @ быть несколькими буквами, цифрами, символами подчеркивания и точками, затем впоследствии разрешать несколько букв и цифр, затем требовать точку, затем две-четыре буквы для домена верхнего уровня.
Однако сейчас он игнорирует требование наличия домена верхнего уровня. Например, a@b.c, очевидно, является действительным (и должно быть), но a @ b также возвращается как действительное, что я хочу, чтобы ti был помечен как не очень.
Я уверен, что что-то упустил, но после часа просмотра Google я не понимаю, что это может быть. У кого-нибудь есть ответ на эту загадку?
РЕДАКТИРОВАТЬ: скорость, с которой приходят ответы, делает этот сайт лучше, чем его конкуренты. Молодец!