Строка регулярного выражения php требует больше разделителей?

Я пытаюсь использовать регулярное выражение для проверки действительности адреса электронной почты в 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 

Я сделал все возможное, чтобы избежать всех специальных персонажей. есть что-то, что мне не хватает?

Related of "Строка регулярного выражения php требует больше разделителей?"

Вы избегаете своих разделителей, 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»