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

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

思路:

1、正则:

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

2、连续输入:

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

111111

qqqqqq

ZZZZZZ

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

也就是下面那哥们

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

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

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

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

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

3、输入过于简单:

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

总结:

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

算法导论之最大子段和

  《算法导论》一书中对最大字段和可谓讲的是栩栩如生,楚楚动人。如果简单的说最大字段和,没有意义。而《算法导论》上举了一个股票的例子。根据股票每天结束的价格来求...

2677
来自专栏iOS 开发杂谈

浅谈 KVO 的实现原理

KVO 全称 KeyValueObserving 是 Objective-C 对观察者模式(Observer Pattern)的实现;KVO 提供一种机制,当指...

3753
来自专栏iOS技术杂谈

KVC 使用方法详解及底层实现你要知道的KVC、KVO、Delegate、Notification都在这里

你要知道的KVC、KVO、Delegate、Notification都在这里 转载请注明出处 https://cloud.tencent.com/develop...

4457
来自专栏菩提树下的杨过

objective-C中的序列化(serialize)与反序列化(deserialize)

obj-c中有一类对象:NSArray,NSDictionary,NSString,NSNumber,NSDate,NSData以及它们的可变版本(指NSMut...

2085
来自专栏冰霜之地

iOS 如何实现Aspect Oriented Programming (下)

从调用栈可以看出,Aspects hook过程主要分4个阶段,hookClass,ASPECTS_ARE_BEING_CALLED,prepareClassAn...

992
来自专栏菩提树下的杨过

objective-C 的内存管理之-引用计数

obj-c本质就是"改进过的c语言",大家都知道c语言是没有垃圾回收(GC)机制的(注:虽然obj-c2.0后来增加了GC功能,但是在iphone上不能用,因此...

20410
来自专栏数据结构与算法

6261:汉诺塔问题

6261:汉诺塔问题 总时间限制: 1000ms 内存限制: 65536kB描述 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的...

3755
来自专栏青玉伏案

Objective-C中的语法糖

  写这篇博客源于一个疑问:“WoK~, 这也行?!”。刚接触OC不久,今天做深浅拷贝的测试,无意中把获取NSArray的值写成了用下标获取的方式。当时把注意力...

2155
来自专栏一“技”之长

iOS SEL的理解与使用 原

   有很多人,认为block的推广可取代代理设计模式,其实block并不能取代代理,代理的模式可以让代码逻辑性更强,更整洁,也会有更高的可读性和可扩展性。相比...

744
来自专栏iOS开发笔记

iOS开发之__NSArray0、__NSArrayI、__NSArrayM和__NSPlaceholderArray

概述 最近在整理CoreAnimation,写代码的时候遇到了下面的问题 -[__NSArrayI rectValue]: unrecognized sele...

4448

扫码关注云+社区

领取腾讯云代金券