我有一个文本字段,我想在其中输入密码。我想输入强密码。这意味着 8 到 15 个字符,其中至少一个小写字母、一个大写字母、1 个空格字符、一个数字。请给出建议。
问问题
6100 次
3 回答
5
和
password.length
您可以询问字符串的长度。将其与您想要的限制进行比较。
和
- (BOOL)string:(NSString *)text matches:(NSString *)pattern
{
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSArray *matches = [regex matchesInString:text options:0 range:NSMakeRange(0, text.length)];
return matches.count > 0;
}
您有一个为字符串提供正则表达式的方法(您也可以将其作为 NSString 的类别来实现)。
第一个参数是您的密码,第二个参数是模式。
我对正则表达式不是很好,所以可能有更好的解决方案,但这就是我的方式
NSString *password = @"iS_bhd97zAA!";
NSString *scPattern = @"[a-z]";
NSString *cPattern = @"[A-Z]";
NSString *sPattern = @"[!%&\._;,]";
NSString *nPattern = @"[0-9]";
if (8 <= password.length && password.length <= 15 &&
[self string:password matches:scPattern] &&
[self string:password matches:cPattern] &&
[self string:password matches:sPattern] &&
[self string:password matches:nPattern])
{
NSLog(@"PW is valid");
}
暗示
特殊字符的正则表达式很棘手,因为您需要转义一些字符。我的可能是正确的,但我不确定。
也有可能只在一个正则表达式中执行此操作,但这看起来很可怕 imo
这个
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
除了特殊字符之外,什么都有,也许你想自己添加:D
于 2013-04-26T11:29:53.403 回答
2
这可以使用正则表达式轻松完成。我不熟悉正则表达式,所以我建议这种方式很难。
您可以使用此功能进行检查:
- (BOOL)strongPassword:(NSString *)yourText
{
BOOL strongPwd = YES;
//Checking length
if([yourText length] < 8)
strongPwd = NO;
//Checking uppercase characters
NSCharacterSet *charSet = [NSCharacterSet uppercaseLetterCharacterSet];
NSRange range = [yourText rangeOfCharacterFromSet:charSet];
if(range.location == NSNotFound)
strongPwd = NO;
//Checking lowercase characters
charSet = [NSCharacterSet lowercaseLetterCharacterSet];
range = [yourText rangeOfCharacterFromSet:charSet];
if(range.location == NSNotFound)
strongPwd = NO;
//Checking special characters
charSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
range = [yourText rangeOfCharacterFromSet:charSet];
if(range.location == NSNotFound)
strongPwd = NO;
return strongPwd;
}
于 2013-04-26T11:23:48.683 回答
-2
在 UITextField 的委托方法textField:shouldChangeCharactersInRange:replacementString:
中,您需要执行以下操作:
- 使用属性 myTextField.text 获取文本
- 检查大写和小写字符数
- 同样检查特殊字符和数字计数
如果满足所有条件,则处理该字段,否则显示错误。
我会为你写下代码,但它违反了 SO 政策。您尝试编写此代码,如果遇到困难,您可以随时发布另一个问题。
于 2013-04-26T11:20:38.920 回答