2010-09-17 63 views
-1

此代码验证您的电子邮件字段,但我无法理解它是如何工作的。此代码如何验证电子邮件的工作?

NSString *e = email.text; 
NSString *emailRegEx [email protected]"(?:[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])+)\\])"; 

NSPredicate *regExPredicate =[NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx]; 
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject:e]; 
NSLog(@"myStringMatchesRegEx = %d ",myStringMatchesRegEx); 
+0

您以前使用过正则表达式吗?如果是的话,通过一点一点地阅读来分开它。如果没有,我建议搜索一些正则表达式的教程。 – 2010-09-17 07:20:15

回答

2

这就是一个巨大的正则表达式:)

基本上,NSPredicate说,它希望与一个正则表达式匹配本身(这到底是一个NSString)(你熟悉正则表达式? ),如果给定的NSString(email.text)匹配该正则表达式,则返回YES/NO响应。

从本质上讲,它确保电子邮件的文本是有效的根据大量的正则表达式(我不会进入,因为它需要几个小时才能让我的头)。

+0

你能告诉我一些逻辑来验证电子邮件没有这种正则表达式 – 2010-09-17 07:38:34

+0

正则表达式是如此复杂*因为*在任何情况下正确验证电子邮件并不是微不足道的。你想要什么?令人讨厌的一堆嵌套if语句? – 2010-09-17 07:55:08

+0

是啊,任何人都可以理解为例如;字符串有后缀:com或in或者像这个正常的逻辑 – 2010-09-17 08:41:00