2009-09-03 16 views
15

Powiel możliwe:
How can I convert ereg expressions to preg in PHP?Jak zmienić eregi PHP do preg_match

Potrzebuję pomocy, poniżej znajduje się mała bardzo podstawowe regex do nieco zweryfikować e-mail, zdaję sobie sprawę, że nie nie działa najlepiej, ale na moje potrzeby na razie jest ok.

Obecnie wykorzystuje funkcję eregi PHP który mówi php.net jest teraz zamortyzowanego funkcja i powinno się używać preg_match Zamiast tego, po prostu zastępując Erei z preg_match nie działa, może ktoś mi pokazać jak zrobić to działa?

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

pamiętać, że nie należy używać tego regex do sprawdzania e-mail; jest mocno przestarzały. – Piskvor

+0

@ Piskvor Zgadzam się, to pytanie ma prawie 5 lat też =) powinieneś zamieścić zaktualizowaną odpowiedź, jeśli chcesz i zawsze mogę zmienić "wybraną" odpowiedź na najlepsze podejście – JasonDavis

+0

To IMHO poza zakresem ereg/problem preg; komentowanie wydaje mi się wystarczające. – Piskvor

Odpowiedz

25

Szablony wyrażeń regularnych w stylu Perla zawsze muszą być rozdzielone. Pierwszy znak w ciągu uważana jest za separatorem, więc coś takiego:

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

Powodem początkowej próba nie działa dlatego, że próbował użyć ^ jako znak separatora, ale (oczywiście) znalezionych brak dopasowania ^ na końcu wyrażenia regularnego.

+0

Dzięki, właśnie znalazłem php's FILTER_VALIDATE_EMAIL, wydaje się, że to może być najlepszy sposób, aby przejść, ale nie mogę znaleźć wiele informacji na ten temat – JasonDavis

+2

@jasondavis, "FILTER_VALIDATE_EMAIL" z pewnością byłby lepszym wyborem. E-maile są ** skomplikowane **. – TRiG

10

Trzeba będzie zmienić trzy rzeczy

  1. trzeba dodawać separatory wzoru (może być dowolny znak, ale najczęściej ukośnik)
  2. [[: alnum:]] będzie musiał zostać zastąpiony z odpowiednikiem PCRE
  3. "i" w "eregi" oznacza bez względu na wielkość liter, które PCRE wykonuje z flagą, w szczególności z flagą i.

W przeciwnym razie, reszta wygląda PCRE kompatybilny (tak, to rodzaj zbędne = P)

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

PHP's PCRE zawiera takie opcje jak [: alnum:] jako opcje. – Amber

Powiązane problemy