我必须通过以下注册表验证电话号码。
//**regExpPattern** : "+?[0-9]{0,3}( |-)?[0-9]{4}( |-)?[0-9]{3}( |-)?[0-9]{3}"
-(BOOL) textFieldValidation:(NSString *)checkString withRegEx:(NSString*)regExpPattern
{
NSString *stringToValidate = [[NSString alloc]initWithString:checkString];
NSString *pattern = [[NSString alloc]initWithString:regExpPattern]
NSLog(@"%@ %@",checkString,regExpPattern);
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];
if ([myTest evaluateWithObject:stringToValidate]){
return YES;
}
return FALSE;
}
我遇到以下异常:
'的 NSInvalidArgumentException ' '无法进行正则表达式匹配,原因:(无法打开模式U_REGEX_RULE_SYNTAX(字符串6789054321,模式+ [?] [0-9] {0,3}(| - )?[0-9] {4}( | - )?[0-9] {3}(| - )?[0-9] {3},案例0,佳能0))'
答案 0 :(得分:3)
+
是一个特殊角色;你需要逃避它(\+?
)或正确使用它(例如\s+?
作为前导空格)
答案 1 :(得分:0)
使用这样的模式
regExpPattern=@"(([+]{1}|[0]{2}){0,1}+[1]{1}){0,1}+[ ]{0,1}+(?:[-( ]{0,1}[0-9]{3}[-) ]{0,1}){0,1}+[ ]{0,1}+[0-9]{2,3}+[0-9- ]{4,8}";
答案 2 :(得分:0)
我也遇到了这个问题。 '+'确实是一个元字符,您应该理解为什么使用'+'。
如果你想像普通字符一样匹配'+',那么你应该使用'\ +'。
如果你把'+'视为特殊字符,想要匹配另一个字符。那么你应该在'+'之前添加字符,那么它就不会崩溃。
PS:在iOS谓词中,'like'和'matches'不符合相同的正则表达式匹配规则!