正则表达式的高级使用

今天在写代码的时候遇到了正则匹配密码强度的问题

必须有大小写字母
必须有数字
必须有特殊符号(空格除外)

其中三个要满足两个,emmm 一开始想了很久正则,耽搁了很长的时间没有想出来,后来觉得不能浪费时间,就用forEach加if else 匹配单个字符…,回家后仔细学习了一下正则,发现还有很多内容

正则中 [ ] 表示查找某一个范围的字符串

范围]解释
[abc]查找abc
[a-z]查找a-z
[A-Z0-9]查找A-Z 0-9中的字符
[ ^a-z]表示不再a-z中的字符

量词

量词解释
n+匹配任何包含至少一个 n 的字符串
n*匹配任何包含零个或多个 n 的字符串
n?匹配任何包含零个或一个 n 的字符串
n{X}匹配包含 X 个 n 的序列的字符串
n{X,Y}匹配包含 X 或 Y 个 n 的序列的字符串
n{X,}匹配包含至少 X 个 n 的序列的字符串
n$匹配任何结尾为 n 的字符串
^n匹配任何开头为 n 的字符串
?=n匹配任何其后紧接指定字符串 n 的字符串
?!n匹配任何其后没有紧接指定字符串 n 的字符串

正则表达式中是没有&&的逻辑但是有||的逻辑(|)
所以第一步 必须有大小写字母:

/^(?=.*[a-z])(?=.*[A-Z])\S*$/

这一串表达式可以拆分成三部分 :
(?=.[a-z]) 表示后面的字符必须有小写字母
(?=.
[A-Z]) 表示后面的字符必须有大写字母
\S 匹配除了空格的字符

匹配数字

/^(?=.*[0-9])\S*$/;

匹配特殊符号

 /^(?=.*[^A-z0-9])\S*$/

然后结合(|)实现最终版本

/^((?=.*[^A-z0-9])(?=.*[0-9])|(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])|(?=.*[^A-z0-9])(?=.*[A-Z]))\S{8,}$/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值