Jak mogę sprawdzić, czy wartość wejściowa to prawidłowy adres e-mail przy użyciu php5. Teraz używam tego kodu
function isValidEmail($email){
$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
if (eregi($pattern, $email)){
return true;
}
else {
return false;
}
}
ale pokazuje przestarzały błąd. Jak mogę rozwiązać ten problem. Proszę pomóż mi.
php
regex
validation
email-validation
uczeń
źródło
źródło
eregi
są funkcją) jest przestarzałe. Zamiast tego użyj PCRE .Odpowiedzi:
Możesz użyć tej
filter_var()
funkcji, która daje wiele przydatnych opcji sprawdzania poprawności i oczyszczania.Instrukcja PHP filter_var ()
Dostępne w PHP> = 5.2.0
Jeśli nie chcesz zmieniać kodu, który opierał się na Twojej funkcji, po prostu wykonaj:
Uwaga : W przypadku innych zastosowań (gdzie potrzebujesz Regex), przestarzała
ereg
rodzina funkcji (POSIX Regex Functions) powinna zostać zastąpionapreg
rodziną ( PCRE Regex Functions ). Istnieje niewielka ilość różnic, przeczytanie instrukcji powinno wystarczyć.Aktualizacja 1 : Jak wskazał @binaryLV :
Ten błąd został już naprawiony.
Aktualizacja 2 : Ta metoda zostanie oczywiście zweryfikowana
bazmega@kapa
jako prawidłowy adres e-mail, ponieważ w rzeczywistości jest to prawidłowy adres e-mail. Ale przez większość czasu w Internecie, chcemy także adres e-mail, aby mieć TDU:[email protected]
. Jak zasugerowano w tym poście na blogu (link opublikowany przez @Istiaque Ahmed ), możesz rozszerzyćfilter_var()
o wyrażenie regularne, które sprawdzi istnienie kropki w części domeny (nie będzie jednak sprawdzać poprawnej nazwy TLD):Jak zauważył @Eliseo Ocampos , ten problem istnieje tylko przed PHP 5.3, w tej wersji zmienili wyrażenie regularne i teraz robi to sprawdzenie, więc nie musisz.
źródło
eregi
, wygląda na to, że używa PHP 5.3. Ale tak, ważne jest, aby o tym wspomnieć (dla innych)).FILTER_VALIDATE_EMAIL
, z którym związany był błąd segfault podczas sprawdzania poprawności dużych wartości. Proste i bezpieczne obejście tego problemu jest używanestrlen()
wcześniejfilter_val()
. Nie jestem pewien co do wersji 5.3.4 final, ale napisano, że problem dotyczy również niektórych wersji 5.3.4-snapshot.filter_val
lubfilter_var
?Zobacz uwagi na http://www.php.net/manual/en/function.ereg.php :
źródło
To jest stary post, ale podzielę się jednym moim rozwiązaniem, ponieważ nikt wcześniej nie wspomniał tutaj o jednym problemie.
Nowy adres e-mail może zawierać UTF-8 znaków lub nazw domen, takich jak specjalne
.live
,.news
itpStwierdzam również, że niektóre adresy e-mail mogą znajdować się na cyrylicy i we wszystkich przypadkach standardowe wyrażenie regularne lub
filter_var()
zawiedzie.Dlatego stworzyłem na to rozwiązanie:
Ta funkcja działa doskonale we wszystkich sprawach i formatach wiadomości e-mail.
źródło
Zawsze używam tego:
źródło
alex@.
to zawsze zwraca prawdę, jeśli nie jest to prawidłowy adres e-mail.Trzymaj się z dala od
regex
ifilter_var()
rozwiązania do sprawdzania e-mail. Zobacz tę odpowiedź: https://stackoverflow.com/a/42037557/953833źródło
Posługiwać się:
źródło
Przed walidacją e-maila: Najpierw musisz usunąć wszystkie niedozwolone znaki z e-maila.
następnie potwierdź swój adres e-mail za pomocą tej
filter_var()
funkcji.Np
źródło