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

时间:2014-09-18 16:19:37

标签: ios regex nspredicate

我尝试使用正则表达式验证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 个答案:

答案 0 :(得分:1)

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

尝试使用此谓词:

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