2010-10-02 14 views
47

Buduję stronę internetową za pomocą `Django. Strona może mieć znaczących użytkowników z krajów nieanglojęzycznych.Czy adresy e-mail mogą zawierać znaki niealfanumeryczne?

Chcę się tylko dowiedzieć, czy istnieją jakieś techniczne ograniczenia dotyczące typów znaków, które może zawierać adres e-mail.

Czy adresy e-mail mogą zawierać wyłącznie angielskie alfabety, cyfry, "_", "@" i "."?

Czy mogą zawierać alfabet inny niż angielski, taki jak "é" lub "ü"?

Czy mogą zawierać znaki chińskie, japońskie lub inne znaki Unicode?

Odpowiedz

26

Adres e-mail consists of two partslocal przed @ i domain, który obowiązuje.

reguły do ​​tych części są różne:

Dla local part można użyć ASCII:

  • łacińskie litery A - Z A - Z
  • cyfry 0 - 9
  • znaki specjalne #! $% & '* + -/=?^_ `{|} ~
  • dot., Że nie jest on pierwszy ani ostatni, a nie w sekwencji
  • spacja i "(),:; <> @ [] znaki są dozwolone z ograniczeniami (są one dozwolone tylko wewnątrz cytowanego łańcucha, ukośnik lub cudzysłów musi być poprzedzone odwrotnym ukośnikiem)
  • Plus since 2012 można użyć międzynarodowy characters aboveU+007F, kodowane as UTF-8.

Domain part jest bardziej ograniczona:

  • łacińskie litery A - Z A - Z
  • cyfry 0 - 9
  • myślnik - To nie jest pierwszy lub ostatni, wiele myślniki są kolejno dozwolony.

Regex to validate

^(([^<>()\[\]\.,;:\[email protected]\"]+(\.[^<>()\[\]\.,;:\[email protected]\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\[email protected]\"]+\.)+[^<>()[\]\.,;:\[email protected]\"]{2,})

Nadzieja to zaoszczędzić trochę czasu.

+0

Gdzie jest stosowanie tych ograniczeń "części domeny"? 'Łacińskie litery A - Z a - z' ' cyfry 0 - 9' – user3175580

+0

Wystarczy dodać tutaj @ matas-vaitkevicius, RFC 6531 jest ** zaproponowany ** standard. To jeszcze nie jest kompletny standard. –

+0

Regex nie działa w JAVA; pattern = Pattern.compile ("^ (([^ <>() \ [\] \.,;: \ s @ \"] + (\. [^ <>() \ [\] \.,;: \ s @ \ "] +) *) | (\". + \ ")) @ (([^ <>() [\] \.,;: \ s @ \"] + \.) + [^ <>() [\] \.,;: \ s @ \ "] {2,})", Pattern.CASE_INSENSITIVE); – Furkan

35

Cóż, tak. Przeczytaj (przynajmniej) this artykuł z Wikipedii.

Mieszkam w Argentynie i tutaj są dozwolone maile jak ñoñó[email protected]

+9

Twoje przykładowe znaki są w zestawie Latin1 i nie wymagają pełnego Unicode. – Bryce

+4

Nie mogę znaleźć usługi, która pozwala na takie adresy e-mail, czy możesz wskazać jedną? – theCakeCoder

+0

@ eKek0, Czy takie adresy e-mail są wspólne? Czy będzie dobrze mieć politykę wyłączania adresów e-mail innych niż ascii? – Pacerier

4

Istnieje możliwość, aby mieć non-ASCII adresów e-mail, jak przedstawiono w niniejszym dokumencie RFC: http://tools.ietf.org/html/rfc3490 ale myślę, że nie został ustalony dla wszystkich krajów i z tego co rozumiem, tylko jeden kod językowy będzie dozwolony dla każdego kraju, a istnieje również sposób, aby przekształcić go w ASCII, ale to nie będzie trywialny problem.

17

Dozwolona składnia adresu e-mail jest opisana w RFC 3696 i jest dość zaangażowana.

Dokładna zasada [dla części lokalnej; część przed znakiem "@" oznacza, że ​​każdy znak ASCII, w tym znaki kontrolne , może pojawić się w cudzysłowie lub w cudzysłowy. Przy cytowaniu jest potrzebne, znak backslash jest używany do podać następujące charakter
[...]
bez cudzysłowów, lokalni części mogą składać się z dowolnej kombinacji Litery alfabetu, cyfry, lub każdy ze znaków specjalnych ! # $% & '* + -/=?^_ `. {| } ~
[...]
Dowolne znaki lub kombinacja bitów (jako oktety) są dozwolone w nazwach DNS . Istnieje jednak preferowana forma wymagana przez większość aplikacji ...

... i tak dalej, w pewnym zakresie.

9

Zamiast martwić się o to, jakie adresy e-mail mogą i nie mogą zawierać, na co naprawdę nie masz ochoty, sprawdź, czy konfiguracja może wysłać do nich e-mail, czy nie - właśnie to Cię interesuje! Oznacza to, że faktycznie wysłałeś e-mail weryfikacyjny.

W przeciwnym razie nie można złapać znacznie częstszego przypadku przypadkowych literówek, które pozostają w dowolnym zestawie znaków, który opracowujesz. (Quick: czy [email protected] jest prawidłowym adresem do użycia w Twojej witrynie, czy też nie?) Pozwala także uniknąć niepotrzebnego i nieuzasadnionego alienowania jakichkolwiek użytkowników, gdy powiesz im, że ich poprawny i poprawny adres jest nieprawidłowy. Nadal możesz nie być w stanie przetworzyć niektórych adresów (jest to konieczne alienacja), jak mówią inne odpowiedzi: przetwarzanie adresu e-mail nie jest banalne; ale to jest coś, czego potrzebują, aby dowiedzieć się, czy chcą podać ci adres e-mail!

Wszystko, co powinieneś sprawdzić to to, że użytkownik dostarcza tekst przed @, trochę tekstu po nim, a adres nie jest skandalicznie długi (powiedzmy 1000 znaków).Jeśli chcesz podać ostrzeżenie ("to wygląda na kłopot !, jest podwójne literowanie przed kontynuowaniem"), to dobrze, ale nie powinno blokować procesu dodawania adresu e-mail.

Oczywiście, jeśli nie chcesz wysyłać do nich wiadomości e-mail, po prostu weź wszystko, co wpisano. Na przykład adres może być używany wyłącznie dla Gravatar, ale Gravatar weryfikuje wszystkie adresy e-mail.

+17

To nierozsądne, aby powiedzieć ludziom, co robią i nie obchodzi. (Na przykład, ponieważ adresy e-mail są zwykle niewrażliwe na wielkość liter, ważne jest, aby wiedzieć, czy musisz radzić sobie z Unicode lub po prostu ASCII.) –

2

Napotkałem adresy e-mail z pojedynczymi cudzysłowami, a nierzadko. Odrzucamy białe spacje (choć ściśle rzecz biorąc jest to dozwolone), więcej niż jeden znak "@" i ciągi adresów o długości krótszej niż pięć znaków. Sądzę, że rozwiązuje to więcej problemów niż się tworzy, i jak na razie ponad dziesięć lat i kilkaset tysięcy adresów pracowało nad odrzuceniem wielu adresów śmieci. Istnieje również wyzwalacz do zrzucenia wszystkich adresów e-mail podczas wstawiania lub aktualizacji.

W związku z tym niemożliwe jest potwierdzenie wiadomości e-mail bez podróży w obie strony do właściciela, ale przynajmniej możemy odrzucić dane, które są wyjątkowo podejrzane.

+0

Adresy e-mail (część użytkownika ....) mogą być rozróżniane ...... (Zaleca się, że nie są, zobacz [RFC5321] (https://tools.ietf.org/html/rfc5321) sekcja 2.4) Nie powinieneś zmieniać wielkości liter na adresach otrzymanych .... (kiedy jest używany jako nazwa użytkownika, to rozsądnie jest zignorować przypadek ....) (Technicznie [email protected] i [email protected] mogą być różnymi użytkownikami ...) (znam przypadek sprzed lat, kiedy system pocztowy wymagał dopasowania sprawy (np. [email protected] działał, [email protected] nie) dla e-maili, aby dotrzeć do użytkowników końcowych ...) –

Powiązane problemy