如何验证必须包含数字或字母(或两者)以及特殊字符的密码?

Dan*_*ruz 0 objective-c uitextfield ios

您好我目前使用以下来验证密码,但我也想包括特殊字符.目前它只包含数字和字母.请帮忙.

 - (BOOL)validatePassword:(NSString *) password{
    NSString *ACCEPTABLE_CHARECTERS = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARECTERS] invertedSet];
    NSString *filtered = [[password componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    return [password isEqualToString:filtered];
}
Run Code Online (Sandbox Code Playgroud)

Piy*_*rma 14

你可以试试这个

- (BOOL)validatePassword:(NSString *) password{
    if(password.length == 0){
    return NO;
    }
    NSString *regex = @"^(?=(.*\d){2})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z!@#$%]{8,}";
    NSPredicate *passwordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    return [passwordPredicate evaluateWithObject:password];
}
Run Code Online (Sandbox Code Playgroud)

说明

(?=(.*\d){2})- 使用预测(?=)并说密码必须至少包含2位数

(?=.*[a-zA-Z]) - 使用预测并说密码必须包含alpha

(?=.*[!@#$%]) - 使用预测并说密码必须包含一个或多个已定义的特殊字符

[0-9a-zA-Z!@#$%] - 指示允许的字符

{8,} - 说密码必须至少8个字符

它可能需要一些调整,例如确切地指定你需要哪些特殊字符,但它应该做到这一点.