Jaka jest dobra technika sprawdzania poprawności adresu e-mail (np. Z pola wprowadzania użytkownika) w systemie Android? org.apache.commons.validator.routines.EmailValidator nie wydaje się być dostępny. Czy robią to inne biblioteki, które są już zawarte w Androidzie, czy też muszę korzystać z RegExp?
320
Odpowiedzi:
Nie używaj reg-ex.
Najwyraźniej poniżej znajduje się reg-ex, który poprawnie sprawdza poprawność większości adresów e-mail zgodnych z RFC 2822 (i nadal nie powiedzie się na przykładach takich jak „uż[email protected]”, podobnie jak org.apache.commons.validator. routines.EmailValidator)
Być może najprostszym sposobem na sprawdzenie poprawności wiadomości e-mail jest wysłanie wiadomości e-mail z potwierdzeniem na podany adres. Odbija się, a następnie jest nieważna.
Jeśli chcesz wykonać podstawowe kontrole, możesz po prostu sprawdzić, czy jest w formularzu
*@*
Jeśli masz jakieś zatwierdzenie specyficzne dla logiki biznesowej, możesz to zrobić za pomocą wyrażenia regularnego, np. Musi to być konto gmail.com lub coś takiego.
źródło
[email protected]
, a nawet dłużej, jak .museum. Czy coś brakuje? Nie chcę blokować żadnego z moich użytkowników, nie weryfikując ich prawidłowego adresu e-mail, ale wydaje się, że działa to na wszystko, co tylko mogę wymyślić.Inną opcją są wbudowane Wzory zaczynające się od API Poziom 8:
Widoczne źródło wzorów
LUB
Jedno liniowe rozwiązanie @AdamvandenHoven:
źródło
(target == null)
zTextUtils.isEmpty(target)
:)[email protected]
jako prawidłowy eNastępny wzór jest używany w poczcie K-9:
Możesz użyć funkcji
źródło
android.util.Patterns.EMAIL_ADDRESS
?[a-zA-Z0-9+._%-]
i pozostałe[a-zA-Z0-9-]
i
z@gmail.com
niej wartość true. To samo w `@yaho.com.Od API 8 (Android 2.2) istnieje wzorzec: android.util.Patterns.EMAIL_ADDRESS http://developer.android.com/reference/android/util/Patterns.html
Możesz więc użyć go do sprawdzenia poprawności e-maila:
zwraca true, jeśli adres e-mail jest prawidłowy
UPD: Kod źródłowy tego wzoru to:
patrz: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/util/Patterns.java
Możesz więc zbudować go samodzielnie dla kompatybilności z API <8.
źródło
Mamy teraz prosty dopasowywanie wzorców e-maili
źródło
Użyj prostego kodu jednokreskowego do sprawdzania poprawności wiadomości e-mail
użyj jak ...
źródło
Oto sugestie Android Studio:
źródło
email == null
jest redandunt, ponieważ TextUtils sprawdza go w środkuMożesz użyć do tego wyrażenia regularnego. Coś takiego jak poniżej.
Uwaga: Sprawdź podane powyżej wyrażenie regularne, nie używaj go takim, jakim jest.
źródło
"Example Guy" <[email protected]>
. Chociaż technicznie możesz sprawdzić poprawność wiadomości e-mail za pomocą wyrażenia regularnego , jest to trochę absurdalne.użyj Androida: inputType = "textEmailAddress" jak poniżej:
i:
źródło
Możesz napisać rozszerzenie Kotlin w następujący sposób:
A potem nazwij to tak:
źródło
Istnieje
Patterns
pakiet w pakiecie,android.util
który jest tutaj korzystny. Poniżej znajduje się metoda, której zawsze używam do sprawdzania poprawności wiadomości e-mail i wielu innych rzeczyźródło
Zadzwoń do tej metody, pod którą chcesz zweryfikować identyfikator e-mail.
źródło
W przypadku sprawdzania poprawności adresu e-mail Android udostępnia wzorzec InBuilt. Ale obsługuje tylko interfejs API w wersji 8 i wyższej .
Oto kod używający tego wzorca do sprawdzania poprawności wiadomości e-mail.
Upewnij się, że po wykonaniu tej metody powinieneś sprawdzić, czy jeśli ta metoda zwróci wartość true, możesz pozwolić na zapisanie wiadomości e-mail, a jeśli ta metoda zwróci wartość false, wyświetl komunikat, że wiadomość e-mail jest „nieprawidłowa”.
Mam nadzieję, że dostaniesz odpowiedź, dziękuję.
źródło
Czy mogę KONIECZNIE zalecić, aby nie próbować „sprawdzać poprawności” adresów e-mail, po prostu dostaniesz się do pracy bez powodu.
Tylko upewnij się, że to, co jest wprowadzone, nie złamie twojego kodu - np. Nie będzie spacji lub niedozwolonych znaków, które mogłyby spowodować wyjątek.
Wszystko inne spowoduje tylko dużo pracy przy minimalnym zwrocie ...
źródło
Sprawdź poprawność formatu adresu e-mail. [email protected]
źródło
źródło
Jeśli używasz interfejsu API 8 lub nowszego, możesz użyć łatwo dostępnej
Patterns
klasy do sprawdzania poprawności wiadomości e-mail. Przykładowy kod:Przypadkowo, jeśli w ogóle obsługujesz poziom API mniejszy niż 8, możesz po prostu skopiować
Patterns.java
plik do swojego projektu i odwołać się do niego. Możesz pobrać kod źródłowyPatterns.java
z tego linkuźródło
Tutaj jest
android.util.Patterns.EMAIL_ADDRESS
String
dopasuje to, jeśliPrzykład jakiegoś specjalnego adresu e-mail
Możesz zmodyfikować ten wzór dla swojej sprawy, a następnie zatwierdzić przez
źródło
Wypróbuj tę prostą metodę, która nie może zaakceptować adresu e-mail zaczynającego się od cyfr:
źródło
Wypróbuj ten kod .. To naprawdę działa ..
źródło
Wykorzystałem następujące. Zawiera jednak dodatkowe znaki niż zwykłe wiadomości e-mail, ale był to dla mnie wymóg.
Odpowiedź na to pytanie: - Wymóg potwierdzenia adresu e-mail z podanymi punktami
Wyjaśnienie-
źródło
Kluczem tutaj jest to, że chcesz w pełni zweryfikować adres e-mail. Nie chcesz tylko sprawdzać poprawności składniowej, chcesz sprawdzić, czy adres e-mail jest prawdziwy.
Dwa oczywiste powody: prawdziwi użytkownicy często źle wpisują swoje adresy e-mail, a niektórzy użytkownicy mogą podawać fałszywe adresy e-mail. Dlatego chcesz wykonać kontrolę składniową i kontrolę istnienia.
Najlepszym sposobem na to, co znalazłem na Androidzie, jest użycie do tego darmowego API Cloudmersive Validation API .
Kod wygląda następująco:
Używam tego we wszystkich moich aplikacjach i jest to świetne, ponieważ mogę sprawdzić adresy e-mail w UX w punkcie wejścia.
źródło
Najprostsze rozwiązanie Kotlin wykorzystujące funkcje rozszerzeń:
a następnie możesz sprawdzić w następujący sposób:
źródło
Pamiętaj, że większość wyrażeń regularnych jest niepoprawna dla międzynarodowych nazw domen (IDN) i nowych domen najwyższego poziomu, takich jak .mobi lub .info (jeśli sprawdzasz kody krajów lub .org, .com, .gov i tak dalej).
Prawidłowe sprawdzenie powinno oddzielić część lokalną (przed znakiem) i część domeny. Należy również wziąć pod uwagę maksymalną długość części lokalnej i domeny (łącznie 255 znaków, w tym znak at).
Najlepszym rozwiązaniem jest przekształcenie adresu w formacie zgodnym z IDN (jeśli jest wymagany), sprawdzenie części lokalnej (RFC), sprawdzenie długości adresu i sprawdzenie dostępności domeny (wyszukiwanie DNS MX) lub po prostu wysłanie wiadomości e-mail .
źródło
Klasa Linkify ma kilka całkiem przydatnych metod pomocniczych, które mogą być istotne, w tym wyrażenia regularne zaprojektowane do pobierania numerów telefonów i adresów e-mail i takie:
http://developer.android.com/reference/android/text/util/Linkify.html
źródło
Użyłem następującego kodu. Działa to z rusztem. Mam nadzieję, że ci to pomoże.
i zastosuj metodę podążania. Zwraca wartość true, jeśli wiadomość e-mail jest poprawna.
źródło
email to twój email-is.
źródło
Dla miłośników wyrażeń regularnych najlepszy (np. Zgodny z RFC 822) wzór wiadomości e-mail, jaki kiedykolwiek znalazłem, jest następujący (przed dostarczeniem filtrów PHP). Myślę, że łatwo jest to przetłumaczyć na Javę - dla osób grających z API <8:
źródło
Za pomocą pliku oval.jar możesz bardzo łatwo przeprowadzić dowolną weryfikację w systemie Android. OVal to pragmatyczne i rozszerzalne ogólne narzędzie do sprawdzania poprawności dla dowolnego rodzaju obiektów Java.
Śledź ten link: http://oval.sourceforge.net/userguide.html
Możesz pobrać to stąd: http://oval.sourceforge.net/userguide.html#download
Możesz użyć walidacji, ustawiając tagi w zmiennych
źródło
Możesz także użyć
Jeśli adres e-mail jest nieprawidłowy, wygeneruje wyjątek adresu .
Niestety, Android nie obsługuje jndi-dns , ale aby dać ci wyobrażenie o bardziej skutecznym sprawdzaniu poprawności wiadomości e-mail, możesz użyć jej do sprawdzenia domeny. Może guru od Androida mógłby pomóc i pokazać, czy istnieją podobne alternatywy ... Przykładowa implementacja z „regularną” javą jest dostępna tutaj .
EDYTOWAĆ
Właśnie zdałem sobie sprawę, że javax.mail nie obsługuje też ... Ale ten post pokazuje obejście .
źródło