ios:使用 NSPredicate 检查正则表达式 - 无法解析格式字符串

Posted

技术标签:

【中文标题】ios:使用 NSPredicate 检查正则表达式 - 无法解析格式字符串【英文标题】:ios: Checking regular expression with NSPredicate - Unable to parse the format string 【发布时间】:2014-09-18 16:19:36 【问题描述】:

我正在尝试使用正则表达式验证 ios 中的用户名。为此,我使用了 NSPredicate,但它引发了运行时错误。

这是我的 ViewController 中的内容:

@property (nonatomic, strong) NSString *userNamePattern;

还有:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) 
    // Custom initialization
    _userNamePattern = @"[a-zA-Z0-9_-]3,20";

然后在一个动作中点击按钮时:

  NSPredicate *userNameTest = [NSPredicate predicateWithFormat:self.userNamePattern];

在底线它抛出了这个错误:

   *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "[a-zA-Z0-9_-]3,20"'

为什么不这样?

【问题讨论】:

【参考方案1】:

您只是将正则表达式模式传递给谓词。你需要给它一个实际的谓词格式字符串。

为你的谓词试试这个:

NSPredicate *userNameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", self.userNamePattern];

【讨论】:

啊,就是这样。谢谢!

以上是关于ios:使用 NSPredicate 检查正则表达式 - 无法解析格式字符串的主要内容,如果未能解决你的问题,请参考以下文章

iOS之NSPredicate(正则表达式和UIBarController):谓词

iOS小技能:NSPredicate在正则表达式的应用下篇

常用的正则表达式

iOS-NSPredicate正则验证

iOS 正则表达式之---谓词

正则表达式和NSPredicate