webentwicklung-frage-antwort-db.com.de

Überprüfen Sie, ob eine E-Mail-Adresse unter iOS gültig ist

Mögliches Duplikat:
Best Practices für die Überprüfung der E-Mail-Adresse in Objective-C unter iOS 2.0?

Ich entwickle eine iPhone-Anwendung, bei der der Benutzer beim Anmelden seine E-Mail-Adresse angeben muss.

Wie kann am besten überprüft werden, ob eine E-Mail-Adresse eine gültige E-Mail-Adresse ist?

200
raaz

Gute Kakaofunktion:

-(BOOL) NSStringIsValidEmail:(NSString *)checkString
{
   BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
   NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-][email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$";
   NSString *laxString = @"^[email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$";
   NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
   NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
   return [emailTest evaluateWithObject:checkString];
}

Diskussion über Lax vs. Strict - http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/

Und weil Kategorien einfach besser sind, können Sie auch eine Schnittstelle hinzufügen:

@interface NSString (emailValidation) 
  - (BOOL)isValidEmail;
@end

Implementieren

@implementation NSString (emailValidation)
-(BOOL)isValidEmail
{
  BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
  NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-][email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$";
  NSString *laxString = @"^[email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$";
  NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
  NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
  return [emailTest evaluateWithObject:self];
}
@end

Und dann nutzen Sie:

if([@"[email protected]" isValidEmail]) { /* True */ }
if([@"[email protected]" isValidEmail]) { /* False */ }
551
BadPirate

Um zu überprüfen, ob eine Zeichenfolgenvariable eine gültige E-Mail-Adresse enthält, testen Sie sie am einfachsten anhand eines regulären Ausdrucks. Unter regular-expressions.info gibt es eine gute Diskussion über verschiedene reguläre Ausdrücke und ihre Kompromisse.

Hier ist ein relativ einfaches Beispiel, das einige ungültige Adressen zulässt: ^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,6}$

Wie Sie reguläre Ausdrücke verwenden können, hängt von der verwendeten iOS-Version ab.

iOS 4.x und höher

Sie können NSRegularExpression verwenden, mit dem Sie einen regulären Ausdruck direkt kompilieren und testen können.

iOS 3.x

Enthält nicht die Klasse NSRegularExpression, sondern NSPredicate, die mit regulären Ausdrücken übereinstimmen kann.

NSString *emailRegex = ...;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
BOOL isValid = [emailTest evaluateWithObject:checkString];

Lesen Sie einen vollständigen Artikel über diesen Ansatz unter cocoawithlove.com .

iOS 2.x

Enthält keine Übereinstimmungen mit regulären Ausdrücken in den Cocoa-Bibliotheken. Sie können jedoch einfach RegexKit Lite in Ihr Projekt einbinden, wodurch Sie auf die Regex-APIs auf C-Ebene zugreifen können, die in iOS 2.0 enthalten sind.

7
benzado

Hier ist eine gute mit NSRegularExpression, die für mich funktioniert.

[text rangeOfString:@"^[email protected]+\\..{2,}$" options:NSRegularExpressionSearch].location != NSNotFound;

Sie können beliebige reguläre Ausdrücke einfügen, aber ich mag es, wenn Sie dies in einer Zeile tun können.

6
jasongregori

um die E-Mail-Zeichenfolge zu validieren, müssen Sie einen regulären Ausdruck schreiben, um zu überprüfen, ob er in der richtigen Form vorliegt. Es gibt eine Menge im Internet, aber seien Sie vorsichtig, da einige davon rechtliche Adressen ausschließen können.

im Wesentlichen wird es so aussehen

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$

Wenn Sie prüfen, ob die E-Mail vorhanden ist und nicht abprallt, müssen Sie eine E-Mail senden und das Ergebnis sehen. es prallte ab oder tat es nicht. Es kann jedoch sein, dass es einige Stunden lang oder gar nicht springt und dennoch keine "echte" E-Mail-Adresse ist. Es gibt eine Reihe von Diensten, die vorgeben, dies für Sie zu tun, und die wahrscheinlich von Ihnen bezahlt würden, und ehrlich gesagt, warum sollten Sie sich die Mühe machen, zu sehen, ob es real ist?

Es ist gut zu überprüfen, ob der Benutzer seine E-Mail-Adresse nicht falsch eingegeben hat. Andernfalls könnte er sie falsch eingeben, sie nicht erkennen und sich von Ihnen hacken lassen, weil Sie nicht geantwortet haben. Wenn jedoch jemand eine verrückte E-Mail-Adresse hinzufügen möchte, gibt es nichts, was ihn daran hindert, sie in Hotmail oder Yahoo (oder an vielen anderen Orten) zu erstellen, um dasselbe Ziel zu erreichen.

Führen Sie den regulären Ausdruck aus und validieren Sie die Struktur. Vergessen Sie jedoch die Validierung anhand eines Dienstes.

3
PurplePilot