我想验证字符串以检查它是否是字母数字并包含" - "和"。"使用字母数字字符。所以我做了类似的事情来形成正则表达式
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-zA-Z0-9\\.\\-]"
options:NSRegularExpressionCaseInsensitive
error:&error];
NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL valid = [regexTest evaluateWithObject:URL_Query];
应用程序崩溃表明无法形成正则表达式模式。任何人都可以给我一个quickfix,我做错了什么?提前谢谢。
答案 0 :(得分:2)
您必须将NSString
类型的变量传递给NSPredicate
SELF MATCHES :
NSString * URL_Query = @"PAS.S.1-23-";
NSString * regex = @"[a-zA-Z0-9.-]+";
NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL valid = [regexTest evaluateWithObject:URL_Query];
请注意,您不需要使用 SELF MATCHES (正则表达式默认为锚定)的锚点,您需要添加+
以匹配一个或多个允许符号,或{{1匹配0+(也允许空字符串)。
您不需要在字符类的开头/结尾处转义连字符,并且字符类中的点被视为文字点字符。
此外,由于模式中存在小写和大写ASCII字母范围,因此您无需将任何不区分大小写的标记传递给正则表达式。