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

时间:2015-10-27 05:03:31

标签: ios objective-c uitextfield

您好我正在使用以下内容验证密码,但我也希望包含特殊字符。目前它只包含数字和字母。请帮忙。

 - (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];
}

3 个答案:

答案 0 :(得分:14)

你可以试试这个

import com.fasterxml.jackson.core.type.TypeReference;

Map<String, String> map = 
    mapper.readValue(jsonAsString, new TypeReference<Map<String, String>>(){});

<强>说明

- (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]; } - 使用预测(?=(.*\d){2})并说密码必须至少包含2位

(?=) - 使用预测并说密码必须包含alpha

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

(?=.*[!@#$%]) - 指示允许的字符

[0-9a-zA-Z!@#$%] - 说密码必须至少8个字符

可能需要稍微调整,例如确切地指定你需要哪些特殊字符,但它应该可以解决问题。

答案 1 :(得分:0)

-(BOOL)validatePassword:(NSString *) password{
    NSString *COMMON_CHARECTERS = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    NSString *SPECIAL_CHARECTERS = @"@#$%^&*";
    NSCharacterSet *cs_common = [NSCharacterSet characterSetWithCharactersInString:COMMON_CHARECTERS];
    NSCharacterSet *cs_special = [NSCharacterSet characterSetWithCharactersInString:SPECIAL_CHARECTERS];
    NSString *filtere_common = [[password componentsSeparatedByCharactersInSet:cs_common] componentsJoinedByString:@""];
    NSString *filtere_special = [[password componentsSeparatedByCharactersInSet:cs_special] componentsJoinedByString:@""];
    BOOL valid = (password.length == (filtere_common.length + filtere_special.length));
    return valid;
}

答案 2 :(得分:-1)

您可以使用正则表达式来识别特殊字符的使用。喜欢

^([A-ZA-Z +] + [0-9 +] + [&安培;!@#+] +)$

您也可以使用字符集来验证密码: - Check this link