如何验证“。”在电子邮件地址?

时间:2013-04-05 22:47:05

标签: regex forms validation

我有以下方法来验证表单中的电子邮件地址。

 -(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}$";

但这也行不通。有什么建议吗?

编辑:在最初发布问题时,我没有在最后一个点之前放入转义。遗憾。

3 个答案:

答案 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})?$