我是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)'
有人面对这类问题吗?我需要发送多封电子邮件。 在此先感谢!
答案 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个(-
本身)
希望这有帮助