使用正则表达式

时间:2016-11-18 12:15:00

标签: ios objective-c regex

我想验证字符串以检查它是否是字母数字并包含" - "和"。"使用字母数字字符。所以我做了类似的事情来形成正则表达式

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,我做错了什么?提前谢谢。

1 个答案:

答案 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];

请参阅Objective C demo

请注意,您不需要使用 SELF MATCHES (正则表达式默认为锚定)的锚点,您需要添加+以匹配一个或多个允许符号,或{{1匹配0+(也允许空字符串)。

您不需要在字符类的开头/结尾处转义连字符,并且字符类中的点被视为文字点字符。

此外,由于模式中存在小写和大写ASCII字母范围,因此您无需将任何不区分大小写的标记传递给正则表达式。