2009-09-03 4 views
15

Можно создать дубликат:
How can I convert ereg expressions to preg in PHP?Как изменить eregi PHP для preg_match

мне нужна помощь, ниже небольшое очень простое регулярное выражение в некоторой степени проверить электронную почту, я понимаю, что это делает не работайте больше, но для моих нужд это нормально.

В настоящее время она использует функцию eregi РНР который php.net говорит теперь Остаточная функция, и я должен использовать preg_match вместо, просто заменив erei с preg_match не работает, может кто-то показать мне, как заставить его работать?

function validate_email($email) { 
    if (!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) { 
     echo 'bad email'; 
    } else { 
     echo 'good email'; 
    } 
} 
function validate_email($email) { 
    if (!preg_match("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) { 
     echo 'bad email'; 
    } else { 
     echo 'good email'; 
    } 
} 
+0

Обратите внимание, что вы не должны использовать это регулярное выражение для проверки электронной почты; он сильно устарел. – Piskvor

+0

@Piskvor Я согласен, этот вопрос почти 5 лет тоже =) вы должны опубликовать обновленный ответ, если хотите, и я всегда могу изменить «выбранный» ответ на лучший подход. – JasonDavis

+0

Это ИМХО за пределами области ereg/preg issue; комментирование кажется мне достаточным. – Piskvor

ответ

25

Образцы регулярных выражений в стиле Perl всегда должны быть разделены. Самый первый символ в строке считается разделителем, так что-то вроде этого:

function validate_email($email) { 
    if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", $email)) { 
     echo 'bad email'; 
    } else { 
     echo 'good email'; 
    } 
} 

Причина ваша первая попытка не работает, потому что она пытается использовать ^ в качестве символа-ограничителя, но (очевидно) найден не соответствует ^ для конца регулярного выражения.

+0

Спасибо, я только что нашел php's FILTER_VALIDATE_EMAIL, похоже, что это может быть лучший способ, но я не могу найти много информации об этом – JasonDavis

+2

@jasondavis, 'FILTER_VALIDATE_EMAIL' определенно будет лучшим выбором. Электронная почта ** сложна **. – TRiG

10

Вам нужно будет изменить три вещи

  1. необходимость добавления шаблонов разделителей (может быть любым символом, но чаще всего прямой слэш)
  2. [[цифра, буква]] нужно будет заменить с эквивалентом PCRE
  3. «i» в «ереги» означает нечувствительность к регистру, что PCRE делает с флагом, в частности флаг i.

В противном случае, остальное выглядит PCRE совместимы (да, это своего рода излишними = P)

"/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i" 
+1

PHP PCRE включает такие функции, как [: alnum:] как опции. – Amber

Смежные вопросы