OC 密码验证(正则+连续输入+输入过于简单判断)

欢迎大家一起交流 QQ群 139852091

昨天项目上线了,上线之前老板提出一个要求,登陆密码不能设置过于简单的,不能输入连续的字符,没办法,加班改吧

思路:

1、正则:

正则表达式不用说,百度一搜一大堆,别告诉我不会搜,这我可帮不了你,好吧还是帮帮你吧度娘的百度一下你就知道(只能帮到这里了,别的真帮不到你了)

2、连续输入:

我们怎么判断连续输入呢,连续输入也就是如下样式

111111

qqqqqq

ZZZZZZ

判断这个连续输入有两种办法,一在文本输入框的代理方法中TextFieldDelegate

也就是下面那哥们

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

二自己计算字符串,也就是截取字符串,比较字符串,我们来说一下这个怎么截,怎么算

我们先定义一个count  这个用于判断几个有几个相同的字符串了,然后我们开始截取字符串

屁话不多说了,直接贴上代码吧

OC 密码验证(正则+连续输入+输入过于简单判断)_第1张图片

注释已经很详细了,就不做过多的解释

3、输入过于简单:

什么叫输入过于简单呢,我的理解就是什么  111111  123456  654321  等,这个我们做字符串比较就可以了

总结:

把如上方法写成一个类方法,就能完成功能了,下面我贴出代码

OC 密码验证(正则+连续输入+输入过于简单判断)_第2张图片

+ (BOOL) password:(NSString *)password

{

NSString *pattern = @"[a-zA-Z0-9]{6,19}+$";

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

BOOL isMatch = [pred evaluateWithObject:password];

if (isMatch) {

int count = 0;

NSString *newPassword = [password substringToIndex:1];

for (int i = 0; i < password.length; i++) {

NSString *newPassword1;

if (i == 0) {

newPassword1 = [password substringToIndex:i + 1]; //当 i 为 0 的时候  取下表为 1 的字符串

}else{

//当 i 大于 0 时 我们取下标为 i + 1 新的string.length 为 i 个 所有我们再从后面往前面取

newPassword1 = [[password substringToIndex:i + 1] substringFromIndex:i];

}

if ([newPassword1 isEqualToString:newPassword]) {

count++;

}

}

if (count == password.length) {

return NO; // 这里说明 count个相同的字符串,也就是所有密码输入一样了

}

if ([password isEqualToString:@"123456"] ||

[password isEqualToString:@"qwerty"] ||

[password isEqualToString:@"654321"]) return NO;

}

return isMatch;

}

好了,有需要的拿去,想谢我的加群聊

欢迎大家一起交流 QQ群 139852091

你可能感兴趣的:(OC 密码验证(正则+连续输入+输入过于简单判断))