我有以下方法来验证表单中的电子邮件地址。
-(BOOL) validEmailAddress:(NSString*) emailString {
NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$";
NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
if (regExMatches == 0)
return NO; // email invalid
else
return YES; // email valid
}
除非用户发送电子邮件“abc @ xyz”(没有像.com或.org这样的超级域名),否则它会失效。
我很确定这个问题与“。”有关。在我的正则表达式。我试着像这样逃避它,
NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";
但这也行不通。有什么建议吗?
编辑:在最初发布问题时,我没有在最后一个点之前放入转义。遗憾。答案 0 :(得分:0)
你必须逃离最后一个点。因此,您的表达如下:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
但是,由于目标C也将\
解释为转义字符,因此您必须将其转义。这是在Objective C中使用双反斜杠(\\
)
NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";
答案 1 :(得分:0)
我在上一个例子中没有看到转义序列。尝试:
NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";
答案 2 :(得分:0)
你需要逃避这一点,是的。
要接受“abc @ xyz”,您还需要制作点和其后的所有选项。您可以通过将其封装在括号中并使用问号跟随它来完成此操作,例如:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+(\.[A-Z]{2,4})?$