Я пытаюсь использовать регулярное выражение для проверки действительности адреса электронной почты в php-скрипте. Я использую следующую строку в качестве своего регулярного выражения
$reg = "\/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})\$\/";
Я продолжаю получать сообщение об ошибке:
Warning: preg_match(): Delimiter must not be alphanumeric or backslash
Я сделал все возможное, чтобы избежать всех специальных персонажей. есть что-то, что мне не хватает?
Вы избегаете своих разделителей, fe:
$sCorrect = "/[az]/"; $sFalse = "\/[az]\/";
Еще лучше, используйте:
filter_var($sVariable, FILTER_VALIDATE_EMAIL);
Вы избежали слишком много символов:
$reg = "/^([A-Za-z0-9_\-.])+@([A-Za-z0-9_\-.])+\.([A-Za-z]{2,4})$/";
/
regex (в начале и в конце вашего регулярного выражения) не должны быть экранированы ^
и $
не должны быть экранированы. @
Не нужно избегать (но может быть) Несмотря на это, создание собственного регулярного выражения для проверки адресов электронной почты может быть сложным. Скорее всего, вы запрещаете действительные электронные письма (например: +
– допустимый символ, который вы не разрешаете) и / или разрешаете недействительные. Стандарты для этого устанавливаются RFC 822, я считаю – и они являются loooooooong.
Просто используйте filter_var()
как было предложено Уэсли. Или еще лучше, отправьте электронное письмо на указанный адрес. Это лучший и самый надежный способ определить, является ли адрес
a) действительный
б) принадлежит пользователю
Интересное чтение: Я знал, как проверить адрес электронной почты, пока я не прочитал RFC
$reg = "/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,6}\b/i"
Работает с новым Gtld's
Объяснение:
# Options: case insensitive # # Assert position at a word boundary «\b» # Match a single character present in the list below «[A-Z0-9._%+-]+» # Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» # A character in the range between “A” and “Z” «AZ» # A character in the range between “0” and “9” «0-9» # One of the characters “._%” «._%» # The character “+” «+» # The character “-” «-» # Match the character “@” literally «@» # Match a single character present in the list below «[A-Z0-9.-]+» # Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» # A character in the range between “A” and “Z” «AZ» # A character in the range between “0” and “9” «0-9» # The character “.” «.» # The character “-” «-» # Match the character “.” literally «\.» # Match a single character in the range between “A” and “Z” «[AZ]{2,6}» # Between 2 and 6 times, as many times as possible, giving back as needed (greedy) «{2,6}» # Assert position at a word boundary «\b»