Comment changer L'eregi de PHP en prég match [dupliquer]

possibilité de dupliquer:

comment convertir les expressions ereg en preg en PHP?

j'ai besoin d'aide, ci-dessous est un petit regex très de base pour valider un peu un email, je me rends compte qu'il ne fonctionne pas le plus grand, mais pour mes besoins, il est ok pour le moment.

il utilise actuellement PHP fonction eregi qui php.net says is now une fonction dépréciée et je devrais utiliser preg_match à la place, en remplaçant simplement erei par preg_match ne fonctionne pas, quelqu'un peut me montrer comment le faire fonctionner?

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';
    }
}
15
demandé sur Community 2009-09-03 21:42:03

2 réponses

Les motifs regex

de style Perl doivent toujours être délimités. Le premier caractère de la chaîne est considérée comme délimiteur, donc quelque chose comme ceci:

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

la raison pour laquelle votre première tentative n'a pas fonctionné est qu'elle essayait d'utiliser ^ comme le caractère de délimiteur mais (évidemment) n'a pas trouvé de correspondance ^ pour la fin de la regex.

25
répondu Amber 2011-04-28 22:12:06

Vous aurez besoin de changer trois choses

  1. besoin d'ajouter des délimiteurs de patron (peut être n'importe quel caractère, mais le plus souvent une barre oblique vers l'avant)
  2. [[: alnum:]] devra être remplacé par l'équivalent PCRE
  3. le "i" dans "eregi" signifie insensible à la casse, ce que PCRE fait avec un drapeau, spécifiquement le drapeau i .

sinon, le reste semble compatible PCRE (Oui, c'est type de redondance = p)

"/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i"
10
répondu Peter Bailey 2009-09-03 17:49:16