2011-04-25 53 views
23

因为可可中不支持常规的显示效果我觉得RegexKitLite非常有用。 但是所有的例子都提取匹配的字符串。如何检查字符串是否与objective-c中的正则表达式匹配?

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

我怎么能这样做?

+2

正则表达式'Cocoa不支持'?自从iOS 4.0发布以来,NSRegularExpression就已经成为框架的一部分,这个问题已经提出了将近一年的时间,而且显然有一些方法在引入'NSRegularExpression'之前使用了正则表达式,例如,瓦兹的答案。 – 2013-08-14 16:42:17

回答

51

我用NSPredicate用于这一目的:

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

if ([myTest evaluateWithObject: testString]){ 
//Matches 
} 
+0

谢谢,我可以使用默认的正则表达式语法someRegexp? – 2011-04-25 09:31:59

+2

我认为是,例如我用它来进行简单的电子邮件验证:NSString * emailRegex = @“[A-Z0-9a-z ._%+ - ] + @ [A-Za-z0-9 .-] + \\。[A-Za- z] {2,4}“; – Vladimir 2011-04-25 09:33:50

+3

@Vladimir电子邮件正则表达式不足。电子邮件地址可能包含unicode,并且顶级域名的长度不是2到4个字符。 – Winny 2014-04-16 03:57:01

5

使用-isMatchedByRegex:方法。

if([someString isMatchedByRegex:@"^[0-9a-fA-F]+:"] == YES) { NSLog(@"Matched!\n"); } 
+5

注意,这不是可可的一部分。非常简单的答案在这里.. http://stackoverflow.com/questions/4353834/search-through-nsstring-using-regular-expression – Fattie 2013-12-28 17:06:57

+0

那么,@弗拉基米尔的答案似乎对我来说更简单。 – 2014-02-25 17:29:11

+1

为什么使用'== YES'? – 2015-09-25 17:37:52

16

另一种方式来做到这一点,这比使用NSPredicate简单一些了,几乎是一个无证选项的NSString的-rangeOfString:options:

NSRange range = [string rangeOfString:@"^\\w+$" options:NSRegularExpressionSearch]; 
BOOL matches = range.location != NSNotFound; 

我说“几乎无证”,因为该方法本身没有按不会列出可用的选项,但如果您遇到搜索和比较运算符的文档,并且发现NSRegularExpressionSearch,您会发现它是自OS X 10.7和iOS 3.2以来的-rangeOfString...方法的有效选项。

相关问题