Piszę bardzo prostą makietę, aby zademonstrować walidację formularzy HTML5. Zauważyłem jednak, że weryfikacja adresu e-mail nie sprawdza kropki w adresie ani nie sprawdza znaków po tej kropce.
Innymi słowy, „john @ kowalski” jest uważane za prawidłowe, jeśli wyraźnie nie jest prawidłowym adresem e-mail; „łania” nie jest domeną.
Oto jak koduję moje pole e-mail:
<input type="email" required />
Czy to nie wystarczy?
Sprawdź to skrzypce, żeby zobaczyć, co mam na myśli.
Uwaga: zamiast tego wiem, jak to osiągnąć za pomocą wzorca RegEx. Zastanawiam się tylko, jak ktoś mógłby uciec z użyciem zamiast tego typu e-maila.
html
email-validation
WEFX
źródło
źródło
In other words, "john@doe" is considered valid, when it's clearly not a valid email address; doe isn't a domain.
Tak,doe
zdecydowanie może to być domena (pomyśllocalhost
), a ten adres jest technicznie prawidłowy zgodnie ze specyfikacją.localhost
adresami.Odpowiedzi:
Ponieważ a @ b to prawidłowy adres e-mail (np. Localhost to poprawna domena). Zobacz http://en.wikipedia.org/wiki/Email_address#Examples
Pamiętaj też, że zawsze powinieneś sprawdzać poprawność danych wejściowych na serwerze. Walidacja po stronie klienta powinna mieć na celu wyłącznie przekazywanie użytkownikowi informacji zwrotnej i nie można na niej polegać, ponieważ można ją łatwo ominąć.
źródło
au@ua
Teoretycznie możesz mieć adres bez znaku „.” w.
Ponieważ technicznie rzeczy takie jak:
Wszystkie są prawidłowe e-maile.
Tak więc standardowa walidacja HTML5 dopuszcza wszystkie prawidłowe wiadomości e-mail, w tym te rzadkie.
Aby uzyskać łatwe do odczytania wyjaśnienia (zamiast czytać standardy): http://en.wikipedia.org/wiki/Email_address#Examples
źródło
uz
, która bezpośrednio wskazuje na adres IP z października 2018 r. Jeśli to zrobisznslookup uz
, wskazuje na91.212.89.8
, więc powinno być możliwe również posiadanie poczty e-mail w tej domenie.Spróbuj dodać to do wejścia
Skrzypce
źródło
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+$
RFC 822 , rozdział 6, daje określenie adresu w rozszerzonej notacji Backusa-Naura (BNF)
Korzystanie z tej specyfikacji
a@b
jest prawidłowym adresem.AKTUALIZACJA
Odpowiadając na komentarz Trejkazu, dodaję następujące definicje. Widzimy, że SPACJA jest dozwolona, ale tylko w cudzysłowie.
źródło
Na tej stronie MDN pokazuje, jakie przeglądarki wyrażeń regularnych powinny być używane do weryfikacji wiadomości e-mail:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#Validation
Możesz nieznacznie zmienić to wyrażenie regularne, aby wymagało co najmniej jednej kropki w nazwie domeny: zmień gwiazdkę
*
na końcu wyrażenia regularnego na plus+
. Następnie użyj tego wyrażenia regularnego jakopattern
atrybutu:źródło
Możesz dostosować wzór pola wiadomości e-mail:
źródło
Oto, jak możesz to zrobić w html5, używając wzorca wyrażenia regularnego. Możesz także dołączyć własną wiadomość do wyświetlenia.
źródło
Ten wzór zawsze mi pasuje.
Tekst musi być pisany małymi literami,
pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"
ale myślę, że obejmuje mniej więcej większość e-maili.źródło