实现密码需要同时包含数字和字母的需求

一个用户注册功能的密码有如下要求:有数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。

如果分析需求?拆分!这就是软件设计的一般思路了。于是,拆分需求如下:

1,不能全部未数字

2,不能全部为字母

3,必须是数字或字母

只要能同时满足上面3个要求就可以了, 写出了如下:

^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$

分开注释一下:

^ 匹配一行的开头位置

(?![0-9]+$) 预测该位置后面不全是数字

(?![a-zA-Z]+$) 预测该位置后台不全是字母

[0-9A-Za-z]{8-16} 由8-16位数字和字母组成

$ 匹配行结尾位置

注:(?!xxxx)是正则表达式的负向零宽断言一种形式,标识该位置后不全是xxxx字符

然后我又了解了一下正则表达式的零宽断言,负向零宽

零宽断言:

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零断言。下面举个列子:

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp,比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除ing以外的部分),如查找 

I'm thinking while you're looking.时,会匹配thinking和looking。

(?

负向零宽断言:

零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abd)\w)+\b匹配不能包含连续字符串abc的单词。

零宽度回顾后发断言(?

好的技术需要共享,该内容是我查阅多篇博客总结,没有盗版的意思,只想帮到更多的人。

你可能感兴趣的:(正则表达式)