我试图通过使用objective使用regex来验证密码。我已经搜索了关于这个主题的大约4-5个不同的堆栈溢出答案,由于某种原因,它仍然给了我相同的结果。
字符串需要包含以下最小值:
这也可能是一个逻辑错误,它会撕裂我的灵魂,花了几个小时在这上面。我“相当”肯定它不是但是好..。可能会吧。
这里是我的验证函数:
- (BOOL) validPassword:(NSString *) passwordString {
NSString *passwordRegex = @"(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,20}"; //regex string condition
NSPredicate *passwordValidation = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", passwordRegex];
return [passwordValidation evaluateWithObject:passwordRegex];
}这里我调用函数:
if (![self validPassword:self.passwordTextField.text]) { //if password is invalid
//display feedback to user
} else { //if password is valid
//create a user
}提前谢谢你!
干杯,
发布于 2018-04-27 08:37:27
您正在检查模式是否与其自身兼容,而不是检查密码:
return [passwordValidation evaluateWithObject:passwordRegex];=>
return [passwordValidation evaluateWithObject:passwordString];如果您以不同的方式命名变量:
- (BOOL)validPassword:(NSString *)stringToValidate {
NSString *pattern = @"(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,20}"; //regex string condition
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
return [predicate evaluateWithObject:stringToValidate];
}这可能会更明显。
由于您使用的是一个小方法,其中包含两个var &1个params,因此从相同的序列(_password_FollwedBySomething)开始命名您的变量,因此很难看出当您将其中一个变量放错位置时。
https://stackoverflow.com/questions/50057668
复制相似问题