2009-09-03 6 views
15

Mögliche Duplizieren preg_match:
How can I convert ereg expressions to preg in PHP?Wie PHP eregi ändern

Ich brauche Hilfe, unten eine kleine sehr einfache regex ist eine E-Mail an etwas zu validieren, realisiere ich es tut funktioniert nicht das größte aber für meine Bedürfnisse ist es ok für jetzt.

Es nutzt derzeit PHP eregi Funktion die php.net sagt, ist jetzt eine abgeschriebene Funktion und ich sollte preg_match stattdessen verwenden, einfach erei mit preg_match ersetzen funktioniert nicht, kann mir jemand zeigen, wie es funktioniert?

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

Beachten Sie, dass Sie nicht diese regex verwenden sollten E-Mail zu bestätigen; es ist stark veraltet. – Piskvor

+0

@Piskvor Ich stimme zu, diese Frage ist fast 5 Jahre alt auch =) Sie sollten eine aktualisierte Antwort, wenn Sie möchten, und ich kann immer die "ausgewählte" Antwort auf den besten Ansatz ändern – JasonDavis

+0

Es ist IMHO außerhalb des Geltungsbereichs der ereg/Preg Ausgabe; Kommentieren scheint mir ausreichend. – Piskvor

Antwort

25

Perl-Regex-Muster müssen immer abgegrenzt werden. Die ersten Zeichen in der Zeichenfolge wird das Trennzeichen betrachtet, so etwas wie diese:

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

Der Grund Ihr erster Versuch nicht funktionierte, weil es versucht ^ als Trennzeichen zu verwenden, aber (natürlich) gefunden keine Übereinstimmung ^ für das Ende der Regex.

+0

Danke, ich habe gerade php's FILTER_VALIDATE_EMAIL gefunden, es scheint, als ob es der beste Weg zu gehen wäre, aber ich kann nicht viele Informationen darüber finden – JasonDavis

+2

@jasondavis, 'FILTER_VALIDATE_EMAIL' wäre definitiv eine bessere Wahl. E-Mails sind ** kompliziert **. – TRiG

10

Sie müssen drei Dinge ändern

  1. Notwendigkeit Muster Begrenzungszeichen hinzufügen (kann jedes Zeichen sein, aber am häufigsten ein Schrägstrich)
  2. [[: alnum:]] muss ersetzt werden mit dem PCRE-Äquivalent
  3. Das "i" in "eregi" bedeutet Groß-und Kleinschreibung, die PCRE mit einem Flag, speziell die i Flagge.

Ansonsten sieht der Rest PCRE kompatibel (ja, das ist eine Art von redundanten = P)

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

PHPs PCRE enthält Dinge wie [: alnum:] als Optionen. – Amber