如何检查字符串是否与objective-c中的正则表达式匹配?

Upv*_*ote 28 objective-c regexkitlite

由于Cocoa不支持常规的展示,我发现RegexKitLite非常有用.但所有示例都提取匹配字符串.

我只是想测试一个字符串是否与正则表达式匹配并获得是或否

我怎样才能做到这一点?

Vla*_*mir 56

我为此目的使用了NSPredicate:

NSString *someRegexp = ...; 
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", someRegexp]; 

if ([myTest evaluateWithObject: testString]){
//Matches
}
Run Code Online (Sandbox Code Playgroud)

  • @Vladimir,电子邮件正则表达式不足.电子邮件地址可能包含unicode,顶级域名不包含2到4个字符. (3认同)
  • 我想是的,例如我用它来进行简单的电子邮件验证:NSString*emailRegex = @"[A-Z0-9a-z ._%+ - ] + @ [A-Za-z0-9 .-] + \\. [A-ZA-Z] {2,4}"; (2认同)
  • 这符合我的目的,我没有用户的抱怨:)但你可以很容易地用更好的替换它,因为它不是这个问题的一部分 (2认同)

Vaz*_*Vaz 24

另一种方法,这比使用更简单NSPredicate,是NSString的一个几乎没有文档的选项-rangeOfString:options::

NSRange range = [string rangeOfString:@"^\\w+$" options:NSRegularExpressionSearch];
BOOL matches = range.location != NSNotFound;
Run Code Online (Sandbox Code Playgroud)

我说"几乎没有记录",因为该方法本身没有列出可用的选项,但是如果你发现搜索和比较运算符的文档并发现NSRegularExpressionSearch你将看到它是-rangeOfString...自OS X以来的方法的有效选项10.7和iOS 3.2.