2013-04-28 44 views
1

有没有什么办法可以阻止在使用NSPredicate的电子邮件地址中连续使用"."?我可以用另一种方式检查当前和以前的输入是否是“。”。但我已经使用NSPredicate。因此,如果我只需要包含一些条件,那么我就更喜欢这一点。 我的代码:防止连续“。”在iPhone应用程序中的电子邮件地址

NSString * email = self.emailTextField.text; 
NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
NSPredicate *emailValidation =[NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
BOOL isValidEmail = [emailValidation evaluateWithObject:email]; 

谢谢。

+0

注意,有效的电子邮件地址可能包含连续的“”不要让你的验证器过于严格。 – 2013-04-28 23:19:20

+0

@GregParker但是我已经检查过,诸如yahoo,gmail,hotmail等电子邮件巨头不允许连续使用''。“''。你能给一个真正的例子,电子邮件确实包含或可以包含连续的'“。”'。顺便说一句,谢谢给我看红灯。:) – Geek 2013-04-29 05:39:46

回答

1

你可以尝试修改你的表达的中间部分使用(?!\\.)负先行的点.字符的比赛,例如:

[A-Z0-9a-z._%+-][email protected]([A-Za-z0-9-]|\\.(?!\\.))+\\.[A-Za-z]{2,4} 

在表达\\.(?!\\.)任何地方写着“匹配单个只有当下面的符号是而不是一个点时才有点“。接下来的符号在检查超前的过程中没有被消耗。如果要防止在电子邮件的初始部分点为好,修改部分@之前以同样的方式作为中间部分:

([A-Z0-9a-z_%+-]|\\.(?!\\.))[email protected]([A-Za-z0-9-]|\\.(?!\\.))+\\.[A-Za-z]{2,4} 
+0

谢谢你的回答。你能告诉我这到底是什么吗?我不仅要防止在中间部分,而且要防止在电子邮件地址中的任何地方。 – Geek 2013-04-28 10:49:18

+0

+1。我现在无法对此进行测试。但我认为这会奏效。 – Geek 2013-04-28 11:10:24

相关问题