Iron_Man, потестируй этот пример, вроде бы всё учтено:
code (+/-)
// Массив с ошибками
$errors = [];
// Проверка mail
if (empty($reg_mail)) {
$errors[] = 'Не введён E-mail!';
} elseif (mb_strlen($reg_mail) < 3 || mb_strlen($reg_mail) > 30) {
$errors[] = 'Недопустимая длина E-mail';
}
// Email соответствует, если:
$patt = '~^
[a-z] # начинается с одной из букв латинского алфавита ,
[a-z\d]* # за которой идёт НЕ обязательная последовательность из букв или чисел ,
([._-])? # за которой идёт НЕ обязательный символ . или _ или - ,
(?(1)[a-z\d]+ # если найдена . или _ или -, то за ними обязательна буква или цифра ,
| # иначе (если НЕ найдена . или _ или -) ,
[a-z\d]+)@ # за которой идёт обязательная последовательность из букв и чисел, и @ ,
[a-z]+ # за которой идёт обязательная последовательность из 1-ой и более букв ,
\. # за которыми идёт символ . ,
[a-z]{2,4}$ # за которой идут от 2-х до 4-х букв, и конец строки
~x';
if (!preg_match($patt, $reg_mail)) {
$errors[] = 'Некорректный формат e-mail адреса!';
}
if ($errors) {
die('Ошибка!<br />'. join('<br />', $errors));
}