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

本文介绍了一种用于验证用户注册密码强度的正则表达式,确保密码由8至16位数字和字母混合组成,既包含数字又包含字母。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个用户注册功能的密码有如下要求:有数字和字母组成,并且要同时含有数字和字母,且长度要在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,比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(出re以外的部分),比如在查找reading a book时,它匹配ading。

负向零宽断言:

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

零宽度回顾后发断言(?<!exp),断言此位置的前面不能匹配表达式exp:(?<![a-z]\d{7})匹配前面不是小写字母的七位数字。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值