2016-07-04 10 views
0

Ich habe diese Regex (([A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}) für E-Mail-Adressen und ich versuche, eine Funktion zu machen, um zu überprüfen, ob eine Zeichenfolge entspricht. Ich habe bereits versuchtÜberprüfen, ob Zeichenkette mit Regex-Muster übereinstimmt Swift 2.2

func matches() -> Bool 
{ 
    let emailRegex : String = "([A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 
    return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(self) //I use self because this is an extension of String 
} 

und

func matches() -> Bool 
{ 
    let emailRegex : String = "([A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 
    return self.rangeOfStringrangeOfString(emailRegex, options: .RegularExpressionSearch) != nil 
} 

aber sie entweder geben Sie mir einen Laufzeitfehler (mit NSPredicate) oder sagen, dass jede einzelne E-Mail-Adresse ist ungültig (mit .rangeOfString)

I fand auch eine Regex-Klasse-Deklaration bei this link, die in Swift 1.x geschrieben ist (aber ich kann es leicht in Swift 2.x konvertieren, um es zu bauen), aber es funktioniert auch nicht.

Ich googelte rauf und runter ohne eine funktionierende oder verständliche Methode zu finden (ich bin Swift etwas neu) also meine Frage ist: Wie überprüfe ich, ob eine Zeichenkette mit einer Regex in Swift 2 übereinstimmt?

Antwort

0

Es scheint eine (etwas seltsame) öffnende Klammer am Anfang Ihres regulären Ausdrucks zu sein. Entfernen Sie das und sehen Sie, was passiert:

let emailRegex : String = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 

funktioniert für mich.


Hinweis: Die Überprüfung der E-Mail mit einem regulären Ausdruck ist im Allgemeinen eine schlechte Idee. Es ist besser zu versuchen, die E-Mail zu senden und zu sehen, welchen Fehler Sie erhalten.
Zum Beispiel wird Ihr regulärer Ausdruck für einige der Beispiele fehlschlagen, die unter Wikipedia page on email addresses angegeben sind (insbesondere in Anführungszeichen wie "[email protected]"@example.com).

+0

süßer Jesus es funktioniert, ** vielen Dank **. Anscheinend waren all meine Stunden, in denen ich mit Google zu kämpfen hatte, dank meiner Dummheit eine komplette Zeitverschwendung. – NOVA99

+0

Ich kann aus zwei Gründen keine Bestätigungs-E-Mail senden: 1) Es ist ein Adressbuch 2) Es ist nur ein Befehlszeilen-Tool ... – NOVA99

+0

@ NOVA99 Kommandozeilen-Tools können perfekt E-Mails senden ('/ usr/bin/mail' ist ein klassisches Beispiel). Wenn Sie jedoch das Adressbuch im Auge behalten, sollten Sie in Betracht ziehen, die Verantwortung für die E-Mail-Korrektheit dem Benutzer zu überlassen. Prüfen Sie beispielsweise auch die Gültigkeit der Anschrift (insbesondere internationale Adressen)? – Evert

Verwandte Themen