2017-08-02 5 views
1

J'essaie de valider les e-mails conformément à la norme RFC 5322. J'utilise les éléments suivants C# expressionLa validation par e-mail à l'aide de l'expression regex dans C# ne fonctionne pas dans le projet c objectif

^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$ 

Taken de http://emailregex.com/, mais chaque fois que je tente d'utiliser cet e-mail dans mon application Objectif C ios Je reçois des erreurs

enter image description here

quelqu'un peut me aider avec comment cette expression pourrait être améliorée de sorte que je suis capable de correspondre à valider que les courriels correspondent à la norme RFC 5322? Gardez à l'esprit que cela signifie que non seulement les domaines, mais aussi les adresses IP, doivent être acceptés aussi bien dans les crochets que dans les crochets.

Répondre

0

La réponse précédente est erronée. Ce n'est pas parce qu'il vous manque un crochet de fermeture. XCode pense il vous manque un crochet de fermeture, car il interprète mal vos devis. Comme Rob a dit dans les commentaires que vous devez reformater l'expression là où il y a "ou \

+1

Pour le bénéfice des futurs lecteurs, la mauvaise « réponse précédente » référencé ici a par la suite été supprimé. – Rob

1

Lorsque vous mettez ce modèle regex dans une chaîne littérale, vous devez échapper à tous les " et \ caractère avec un autre \. Ainsi, tous les " devient \" et chaque \ devient \\.

Malheureusement, même après que vous correctif, que C# interprétation ne fonctionne pas avec NSRegularExpression. Mais quand je saisis le au début RFC 5322 standard officiel from that page you referenced, ça a marché après avoir ajouté ^ et $ à la fin comme toi apparemment fait, et d'échapper à tous les " et \ personnages:

NSString *pattern = @"^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$"; 
NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error]; 
NSAssert(regex, @"Regex failed: %@", error);