如何在正则表达式中添加“,”以在目标c

时间:2017-05-26 05:50:30

标签: ios objective-c regex xcode

我是iOS上的新手,我在正则表达式中添加,时遇到了问题。

我的代码就像这样

 NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,100}";        
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];

如果我在正则表达式应用中添加,则崩溃

 NSString *emailRegEx = @"[A-Z0-9a-z._%+-,]+@[A-Za-z0-9.-,]+\\.[A-Za-z,]{2,100}";
 NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];

错误就像这样

  

NSInternalInconsistencyException',原因:'无法进行正则表达式匹配,   原因:无法打开模式U_REGEX_INVALID_RANGE(字符串   abc @ gmail.com,xyz @ gmail.com,模式   [A-Z0-9a-z ._%+ - ,] + @ [A-Za-z0-9 .-,] +。[A-Za-z,] {2,100},案例0,正典   0)'

有人面对这类问题吗?我需要发送多封电子邮件。 在此先感谢!

2 个答案:

答案 0 :(得分:1)

为什么不简单地使用,分隔字符串,并比较每个字符串是否有效。

NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
NSArray *emails = [emailField.text componentsSeparatedByString:@","];
NSMutableArray *valiedEmails = [[NSMutableArray alloc] init];
for (NSString *email in emails) {
    if ([emailTest evaluateWithObject:email]) {
        [valiedEmails addObject: email];            
    }
}
if (valiedEmails.count > 0) {
    txtviewemailaddress.text = [valiedEmails componentsJoinedByString:@", "];
    [self serverconnectionPost];
} 
else {
    //show alert that email is not valid 
}

答案 1 :(得分:0)

将逗号,添加到字符类时,请确保将连字符-移至末尾,或将其\-转义。以下是修复错误的3种方法:

  • [A-Za-z0-9.,-]-移至最后
  • [A-Za-z0-9.\-,]将连字符\-
  • 删除
  • [A-Za-z0-9,-.]修正订单。这包括一个范围(ASCII 44到46),它将包含另一个字符,连字符本身-实际上没有任何字符,所以它与上面两个正则表达式相同!

为什么需要这样做?

如果在字符类中的2个字符之间留下连字符,则引擎会尝试匹配范围.-,,这是无效的ASCII范围(46到44)。但是,如果您已经编写,-.它可以正常工作并且不会出现任何错误,因为它是ASCII 44到46,但是它会包含另一个ASCII字符,它是第45个(-本身)

希望这有帮助