如何验证必须包含数字或字母(或两者)以及特殊字符的密码?
How to validate a password which must contain either number or alphabets(or both) as well as special characters?
您好,我目前正在使用以下内容来验证密码,但我也想包含特殊字符。目前它只包含数字和字母。请帮忙。
- (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];
}
您可以使用正则表达式来识别特殊字符的使用。喜欢
^([a-zA-Z+]+[0-9+]+[&@!#+]+)$
您也可以使用字符集来验证密码:- Check this link
你可以试试这个
- (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 位数字
(?=.*[a-zA-Z])
- 使用前瞻并表示密码必须包含字母
(?=.*[!@#$%])
- 使用前瞻并表示密码必须包含 1 个或多个定义的特殊字符
[0-9a-zA-Z!@#$%]
- 指示允许的字符
{8,}
- 表示密码长度必须至少为 8 个字符
可能需要稍微调整一下,例如准确指定您需要哪些特殊字符,但它应该可以解决问题。
-(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;
}
您好,我目前正在使用以下内容来验证密码,但我也想包含特殊字符。目前它只包含数字和字母。请帮忙。
- (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];
}
您可以使用正则表达式来识别特殊字符的使用。喜欢
^([a-zA-Z+]+[0-9+]+[&@!#+]+)$
您也可以使用字符集来验证密码:- Check this link
你可以试试这个
- (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 位数字
(?=.*[a-zA-Z])
- 使用前瞻并表示密码必须包含字母
(?=.*[!@#$%])
- 使用前瞻并表示密码必须包含 1 个或多个定义的特殊字符
[0-9a-zA-Z!@#$%]
- 指示允许的字符
{8,}
- 表示密码长度必须至少为 8 个字符
可能需要稍微调整一下,例如准确指定您需要哪些特殊字符,但它应该可以解决问题。
-(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;
}