扫码关注官方订阅号
要求:必须同时包含 大写字母,小写字母,数字,特殊符号四个条件中的3个而且长度至少8位即可通过;
欢迎选择我的课程,让我们一起见证您的进步~~
我觉得这种需求更直观的应该用js来做,我写了一个简单的示例你可以参考一下。
function check(str){ var n = 0; // 首先从长度判断 if(str.length < 8) return false; // 依次判断是否包含小写字母,大写字母,数字,特殊字符,并记下满足条件的次数。 n += +/[a-z]/.test(str); n += +/[A-Z]/.test(str); n += +/[0-9]/.test(str); n += +/[~!@#$%^&*]/.test(str); return n >= 3; }
题主应该是做密码强度匹配吧。
这和正则关系不大。
方案
分开匹配,匹配大写字母,匹配小写字母,匹配数字,匹配特殊字符。
设置flag变量,表示匹配成功的次数。if判断,匹配了给flag加1,最后判断是否>=3即可。
flag
if
>=3
也可以有函数式写法,更简洁,但原理相同。
我js不熟,说到这应该很容易实现。一定要正则一次完成,比较复杂,还要用很多高级语法,回头查一下。
js
希望你的逻辑校验放在后端,前端的话,用户是可以不起用js的。
正则实现不了『四个条件中的3个』,分开判断吧
if(len<8) fail(); n = 0; if(包含大写) n+=1; if(包含小写) n+=1; if(包含数字) n+=1; if(包含符号) n+=1; if(n < 3) fail();
为什么一定追求正则呢?直接用代码不就可以轻松实现了吗?4个条件每符合一个计数+1,累计值>=3则通过,长度更可以入口就判断了
PS:正则表达式讲究顺序的,而你要求的4种至少含三种是无序的,那么就需要把可能的组合列出来,比如先大写后小写再数字或者先数字再字母等等,麻烦不说,还大大降低代码可读性
如果非要正则的话这里提供一个参考:(必须同时存在大小写字母)
[A-Za-z]*([A-Z][a-z]|[a-z][A-Z])[A-Za-z]*
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我觉得这种需求更直观的应该用js来做,我写了一个简单的示例你可以参考一下。
题主应该是做密码强度匹配吧。
这和正则关系不大。
分开匹配,匹配大写字母,匹配小写字母,匹配数字,匹配特殊字符。
设置
flag变量,表示匹配成功的次数。if判断,匹配了给flag加1,最后判断是否>=3即可。也可以有函数式写法,更简洁,但原理相同。
我
js不熟,说到这应该很容易实现。一定要正则一次完成,比较复杂,还要用很多高级语法,回头查一下。希望你的逻辑校验放在后端,前端的话,用户是可以不起用
js的。正则实现不了『四个条件中的3个』,分开判断吧
为什么一定追求正则呢?直接用代码不就可以轻松实现了吗?
4个条件每符合一个计数+1,累计值>=3则通过,长度更可以入口就判断了
PS:正则表达式讲究顺序的,而你要求的4种至少含三种是无序的,那么就需要把可能的组合列出来,比如先大写后小写再数字或者先数字再字母等等,麻烦不说,还大大降低代码可读性
如果非要正则的话这里提供一个参考:(必须同时存在大小写字母)