Jaki jest najczystszy sposób weryfikacji adresu e-mail wprowadzanego przez użytkownika w systemie iOS 2.0?
UWAGA : Jest to pytanie historyczne, które jest specyficzne dla iOS 2.0 i ze względu na jego wiek i liczbę powiązanych z nim pytań nie można go wycofać i NIE WOLNO go zmieniać na pytanie „nowoczesne”.
cocoa-touch
email-validation
iphone-sdk-2
Marcus S. Zarra
źródło
źródło
NSDataDetector
do weryfikacji adresów e-mail: stackoverflow.com/a/23547905/257550Odpowiedzi:
Odpowiedź na temat używania wyrażeń regularnych do sprawdzania poprawności adresu e-mail wyjaśnia szczegółowo, że gramatyka określona w dokumencie RFC 5322 jest zbyt skomplikowana dla prymitywnych wyrażeń regularnych.
Polecam prawdziwe podejście do parsera, takie jak MKEmailAddress .
Jako szybkie rozwiązanie wyrażeń regularnych zobacz tę modyfikację DHValidation :
źródło
@"[^@]+@[^.@]+(\\.[^.@]+)+"
Jeśli chcesz zweryfikować adres e-mail, wyślij na niego wiadomość i sprawdź, czy się powiedzie. Nigdy nie zweryfikujesz tego z żadnym poziomem dokładności za pomocą samego wyrażenia regularnego, więc najlepiej nie wkurzać użytkowników i tracić rejestracji z powodu niepotrzebnie ścisłego wyrażenia regularnego.Przeczytaj RFC. Prawie każdy, kto myśli, że wie, jak przeanalizować / wyczyścić / zweryfikować adres e-mail, jest w błędzie.
http://tools.ietf.org/html/rfc2822 Sekcja 3.4.1 jest bardzo przydatna. Ogłoszenie
Tak, to znaczy, że +, 'itd. Są legalne.
źródło
Najlepszym rozwiązaniem, jakie do tej pory znalazłem (i tym, z którym się zdecydowałem) jest dodanie RegexKitLite do projektu, który daje dostęp do wyrażeń regularnych poprzez NSString Categories.
Dodanie do projektu jest dość bezbolesne, a po utworzeniu dowolna logika weryfikacji wiadomości e-mail z wyrażeniami regularnymi będzie działać.
źródło
Na dobry początek musisz zdecydować, co chcesz i nie chcesz akceptować jako adresu e-mail?
99% adresów e-mail wygląda tak: [email protected] lub [email protected]
Jednak posiadanie takiego adresu e-mail jak ten jest technicznie legalne: f
!#$%&'*+-/=?^_
{|} ~ "ha!" @ ComPrawdopodobnie na świecie jest tylko kilka prawidłowych wiadomości e-mail dla domen najwyższego poziomu i prawie nikt nie używa większości tych innych znaków (zwłaszcza cudzysłowów i odwrotnych apostrofów), więc możesz założyć, że są to nieprawidłowe rzeczy do zrobienia. Ale powinieneś to zrobić jako świadomy wybór.
Poza tym zrób to, co mówi Paweł i spróbuj dopasować dane wejściowe do wyrażenia regularnego, takiego jak to: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] { 2,} $
Ten będzie pasował do adresu e-mail prawie każdego.
źródło
Chociaż skupienie się na wyrażeniach regularnych jest dobre, to jest to tylko pierwszy i konieczny krok. Istnieją inne kroki, które również należy uwzględnić, aby stworzyć dobrą strategię walidacji.
Dwie rzeczy nad moją głową to:
Sprawdzanie poprawności DNS, aby upewnić się, że domena rzeczywiście istnieje.
Po sprawdzeniu poprawności dns możesz również wybrać walidację smtp. wyślij wywołanie do serwera smtp, aby sprawdzić, czy użytkownik faktycznie istnieje.
W ten sposób możesz wyłapać wszelkiego rodzaju błędy użytkownika i upewnić się, że jest to prawidłowy adres e-mail.
źródło
Ta funkcja jest prosta, a mimo to dokładniej sprawdza adres e-mail. Na przykład, zgodnie z RFC2822, adres e-mail nie może zawierać dwóch kropek z rzędu, np. Imię..nazwisko @ domena..com
Ważne jest również, aby używać kotwic w wyrażeniach regularnych, jak widać w tej funkcji. Bez kotwic następujący adres e-mail jest uważany za prawidłowy: imię; imię) [email protected] (bla, ponieważ sekcja [email protected] jest prawidłowa, ignorując imię; imię) na początku i (bla na końcu. Kotwice wymuszają mechanizm wyrażeń regularnych do weryfikacji całej wiadomości e-mail.
Ta funkcja korzysta z NSPredicate, które nie istnieje w iOS 2. Niestety może nie pomóc pytającemu, ale miejmy nadzieję, że pomoże innym z nowszymi wersjami iOS. Jednak wyrażenia regularne w tej funkcji można nadal zastosować do RegExKitLite w systemie iOS 2. W przypadku użytkowników korzystających z systemu iOS 4 lub nowszego te wyrażenia regularne można zaimplementować za pomocą NSRegularExpression.
Zobacz sprawdzanie poprawności adresu e-mail przy użyciu wyrażenia regularnego w Objective-C .
źródło
źródło
Zauważyłem, że użycie wyrażenia regularnego działa całkiem nieźle w celu weryfikacji adresu e-mail.
Główną wadą wyrażeń regularnych jest oczywiście łatwość konserwacji, więc komentuj, jakich nigdy wcześniej nie komentowałeś. Obiecuję ci, jeśli tego nie zrobisz, będziesz żałował, że tak się nie stało, gdy wrócisz do wyrażenia po kilku tygodniach.
Oto link do dobrego źródła, http://www.regular-expressions.info/email.html .
źródło
Kopiąc brud, ale właśnie natknąłem się na SHEmailValidator, który wykonuje doskonałą robotę i ma ładny interfejs.
źródło
Wiele witryn internetowych udostępnia wyrażenia regularne, ale dobrze byłoby je poznać i zrozumieć, a także sprawdzić, czy to, co chcesz, spełnia Twoje potrzeby w oficjalnym RFC dla formatów adresów e-mail.
W nauce RegEx języki interpretowane mogą być dużym uproszczeniem i podstawą do testów. Rubular jest oparty na Rubim, ale jest dobrym sposobem na szybkie przetestowanie i zweryfikowanie: http://www.rubular.com/
Poza tym kup najnowsze wydanie książki O'Reilly Mastering Regular Expressions. Będziesz chciał poświęcić czas na zrozumienie pierwszych 3 lub 4 rozdziałów. Wszystko po tym będzie polegało na budowaniu wiedzy na temat wysoce zoptymalizowanego użycia RegEx.
Często serie mniejszych, łatwiejszych w zarządzaniu wyrażeń regularnych są łatwiejsze do utrzymania i debugowania.
źródło
Oto rozszerzenie String, które sprawdza poprawność wiadomości e-mail w Swift.
Skopiowano z odpowiedzi do: Sprawdź, czy adres e-mail jest prawidłowy na iOS
źródło
NSPredicate
iOS 2.0 nie byłoNie powinieneś próbować używać wyrażenia regularnego do sprawdzania poprawności wiadomości e-mail. Przy ciągle zmieniających się TLD Twój walidator jest niekompletny lub niedokładny. Zamiast tego powinieneś wykorzystać
NSDataDetector
biblioteki Apple, które wezmą ciąg i spróbują sprawdzić, czy są jakieś znane pola danych (e-maile, adresy, daty itp.). Apple SDK wykona ciężki wysiłek, aby być na bieżąco z domenami TLD, a Ty możesz odciążyć się od ich wysiłków !! :)Ponadto, jeśli iMessage (lub jakiekolwiek inne pole tekstowe) nie uważa, że to e-mail, czy powinieneś rozważyć e-mail?
Umieściłem tę funkcję w
NSString
kategorii, więc testowany przez ciebie ciąg jestself
.lub jako szybkie
String
rozszerzenieźródło
validate email objective-c
, to pytanie jest trzecim wynikiem. Niektóre rzeczy w Internecie nie starzeją się. :-)NSDataDetector
NIE istniał w iOS 2.0, o co chodziło / dotyczy tego pytania.źródło
NSPredicate
nie istniał w iOS 2; został dodany dopiero w iOS 3.