0

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

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

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

编辑:最初发布问题时,我没有在最后一个点之前添加转义符。对不起。

4

3 回答 3

0

你必须逃脱最后一个点。因此,您的表达如下:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

但是,由于\Objective C 也将 解释为转义字符,因此您必须对其进行转义。这是在 Objective C 中通过使用双反斜杠 ( \\) 完成的

NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";
于 2013-04-05T22:51:17.457 回答
0

在您的上一个示例中,我没有看到转义序列。尝试:

NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";
于 2013-04-05T22:51:29.180 回答
0

你需要逃避这个点,是的。

要接受“abc@xyz”,您还需要将点及其后面的所有内容设为可选。您可以通过将其封装在括号中并在其后加上问号来做到这一点,例如:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+(\.[A-Z]{2,4})?$
于 2013-04-05T23:16:50.310 回答