Вопрос по php, email, pcre, posix-ere – Как изменить eregi PHP на preg_match [duplicate]

15

Возможный дубликат:

Как я могу преобразовать выражения ereg в preg в PHP?

Мне нужна помощь, ниже приведено небольшое ОЧЕНЬ базовое выражение для некоторой проверки электронной почты, я понимаю, что это не работает лучше, но для моих нужд это нормально на данный момент.

В настоящее время он использует PHPфункция эреги который 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';
    }
}
Это's IMHO выходит за рамки проблемы ereg / preg; комментирование кажется мне достаточным. Piskvor
Обратите внимание, что вы не должны использовать это регулярное выражение для проверки электронной почты; это сильно устарело. Piskvor
@Piskvor Я согласен, этому вопросу уже почти 5 лет =) вы должны опубликовать обновленный ответ, если хотите, и я всегда могу изменить "выбран» ответ на лучший подход JasonDavis

Ваш Ответ

2   ответа
10

необходимо добавить разделители шаблонов (может быть любым символом, но чаще всего это косая черта)[[: alnum:]] необходимо заменить на эквивалент PCRE«Я» в "eregi» означает нечувствительный к регистру, который PCRE делает с флагом, особенноi флаг.

В остальном, все выглядит PCRE-совместимым (да, этовид избыточный = P)

"/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i"
PHP»s PCRE включает в себя такие параметры, как [: alnum:] в качестве параметров. Amber
25

. Самым первым символом в строке считается разделитель, поэтому что-то вроде этого:

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';
    }
}

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

Спасибо, я только что нашел php 'S FILTER_VALIDATE_EMAIL, кажется, что это может быть лучший путь, но я не могу найти много информации об этом JasonDavis
@jasondavis,FILTER_VALIDATE_EMAIL определенно будет лучшим выбором. Электронные письмасложно. TRiG

Похожие вопросы