我想验证一个字符串对下面的正则表达式:正则表达式与iOS
[(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{6,20}]
验证通过,如果使用
numberOfMatches
方法如下进行:NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@“[(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{6,20}]” options:0 error:&error]; NSUInteger numberOfMatches = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, string.length)]; BOOL status numberOfMatches == string.length;
如果使用
NSPredicate
进行验证,则验证失败:NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", [(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{6,20}]]; BOOL status = [test evaluateWithObject:string];
这是什么原因?我想用NSPredicate
来做到这一点。
我不是一位ObjC专家,但这看起来不像我熟悉的任何语言的有效正则表达式。你打算如何匹配?具体来说,围绕整个事物的方括号可能不应该在那里。 – Amadan 2014-11-25 07:02:20
你想验证一个字符串是否是字母数字?你想在哪里使用这个正则表达式? – 2014-11-25 07:05:41
两次尝试都不正确。正则表达式应该是'^(?=。* [A-Z])(?=。* [0-9])(?=。* [a-z])。{6,20} $'。在第一种情况下,'numberOfMatches'应该对照1.在第二种情况下,你必须提供'@“'^(?=。* [AZ])(?=。* [0-9])(? =。* [az])。{6,20} $'“'作为参数。 – nhahtdh 2014-11-25 07:10:20