Wiele tworzonych dzisiaj aplikacji internetowych musi umieć radzić sobie z walidacją adresów poczty elektronicznej. Można to zrobić na wiele sposobów, aczkolwiek jest jedna łatwa i szybka metoda polegająca na napisaniu własnej funkcji w PHP. Właśnie to postara się wyjaśnić w niniejszym artykule autor Alejandro Gervasio.
W dobie ekspansji i nieustającego rozwoju sieci tworzone witryny internetowe muszą umieć sobie radzić z problemem użytkowników podających niepoprawne adresy e-mail. Oczywiście temat ten powinien brzmieć znajomo dla większości twórców witryn internetowych zarówno dla tych, którzy umieszczają swoje pierwsze, pisane jak najdokładniej skrypty, czy też tych, którzy implementują bardziej złożone. Niezależnie od sytuacji sprawdzanie poprawności adresów mailowych pod kątem ich przynależności do mogącej istnieć bądź nie domeny jest dobrym zabezpieczeniem (przynajmniej częściowym) przed późniejszymi, narastającymi problemami związanymi z otrzymywaniem fałszywych danych. Zaśmiecanie naszej bazy danych nieprawdziwymi informacjami, wysyłanie powiadomień o nowościach, czy też inne tego typu informacje przesyłane na adresy przynależące do nieistniejących domen mogą nas z czasem przyprawić o bóle głowy..
Do problemu można podejść na parę sposobów. Wszystko zależy od tego jak dokładnie aplikacja ma walidować te adresy. Jeśli wystarczy podstawowy stopień sprawdzania poprawności napisanie w PHP prostej funkcji porównującej wpisany adres do wzorca może w zupełności spełnić twoje oczekiwania. Czasami jednak wymagamy od naszej aplikacji dokładniejszej walidacji. Wtedy powinniśmy zaznajomić się ze sprawdzonymi już klasami takimi jak HTML_Quick Form z pakietu PEAR, czy wieloma innymi.
Trzecią możliwością jest napisanie własnego zestawu funkcji w celu dogłębnego sprawdzania adresów e-mail, co może okazać się rozwiązaniem pośrednim pod względem złożoności pomiędzy tymi dwoma opisanymi powyżej. Metoda ta jest na tyle funkcjonalna i przenośna, że może być użyta jeśli chcemy rozszerzyć naszą wyjściową, podstawową funkcję sprawdzającą lub dodać do już istniejącej nową funkcjonalność..
W tym artykule rozbudujemy krok po kroku funkcjonalność validowania adresu mailowego tak, aby była możliwie najdokładniejsza. Nasze rozwiązanie pozwoli zademonstrować siłę pewnych ciekawych, wbudowanych funkcji sieciowych w PHP , pokaże ono również jak bardzo można zredukować szanse na zaśmiecanie naszej aplikacji przez fałszywe emaile.
Wiedziałem, że w artykule będzie sposób 1 regexem. To zło, ten regex jest nieprawdopodobnie wolny, co wychodzi, jak chce się ten sam algorytm użyć do walidacji emaila po stronie klienta podczas wpisywania. Rozwiązanie jest banalnie proste - dzielimy e-mail po małpie na 2 części i walidujemy osobno domenę (prostsze reguły) i login (troszkę trudniejsze reguły). Ta metoda jest wystarczająco szybka nawet uruchamiana po każdym naciśnięciu klawisza w IE7.
W PHP5.2 jest domyślnie aktywne rozszerzenie "Data Filtering", które pozwala na walidację wielu rzeczy, w tym adresu e-mail. Adres e-mail można sprawdzić w następujący sposób:
<?php
filter_var('admin@przyklad.pl', FILTER_VALIDATE_EMAIL);
?>
@walidacja/rozny:
usun wszystkie spacje z wyrazenia preg_match, to zadziala:>
a mi to to nie dziala... jakiego meila bym nie wpisal wyswietla invalid email address... :(
Oczywiście masz rację że najprościej jest wysłać maila z kodem aktywacyjnym. ale są sytuacje w których nie chodzi o zakładanie konta ale o np umowę - gość wprowadza dane łącznie ze swoim adresem mailowym który jest wymagany do kontaktu i to nawet nie dla mnie ten validator ale niech sie klient kropnie w swoim mailu - a juz kilka razy widzialem jak ludzie robia spacje nie tam gdzie trzeba a potem jest krzyk ze nie ma odzewu na zapytanie czy inną sprawę.
Dlatego napisze genialny artykuł :) zwłaszcza validacja domen mnie polozyła nie wiedzialem ze az tyle sposobów jest na to.
A nie prosciej po prostu wyslac email na podany adres z kluczem aktywacyjnym ?
100% skuteczna metoda