正则表达式(带正则的四选三逻辑)

密码要求:

密码必须包含大写字母、小写字母、数字和特殊字符三种类型,长度在8-30个字符之间。密码不能包含“管理员”字符串

我写的规律

/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z._~!@#$^&*]+$)(?![a-z0-9]+$)(?![a-z._~!@#$^&*]+$)(?![0-9._~!@#$^&*]+$)[a-zA-Z0-9._~!@#$^&*]{8,20}$/ 显然错了。

不知道怎么用正则描述四选三的逻辑。需要帮助。


烙印99
浏览 211回答 2
2回答

浮云间

不要为此使用单个正则表达式,这太复杂了,因为您必须写出 4 个选项的每个可能的 3 组合,并在每个组合之间交替使用|. 将每个测试拆分为一个正则表达式,然后以编程方式检查有多少测试通过:const test = (str) => {&nbsp; const hasUpper = /[A-Z]/.test(str);&nbsp; const hasLower = /[a-z]/.test(str);&nbsp; const hasNumbers = /\d/.test(str);&nbsp; const hasSpecial = /[._~!@#$^&*]/.test(str);&nbsp; if (hasUpper + hasLower + hasNumbers + hasSpecial < 3) {&nbsp; &nbsp; return false;&nbsp; }&nbsp; if (str.toLowerCase().includes('administrator')) {&nbsp; &nbsp; return false;&nbsp; }&nbsp; return str.length >= 8 && str.length <= 30;};如果您还想确保字符串中不存在除描述之外的字符,那么:const hasOther = /[^a-z\d._~!@#$^&*]/i.test(str);if (hasOther) {&nbsp; return false;}

繁星淼淼

let reg =/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{8,30}$/;if(!reg.test(str) || str.toLowerCase().includes('administrator')){&nbsp; return false;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript