密码要求:
密码必须包含大写字母、小写字母、数字和特殊字符三种类型,长度在8-30个字符之间。密码不能包含“管理员”字符串
我写的规律
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z._~!@#$^&*] +$)(?![a-z0-9]+$)(?![a-z._~!@#$^&*]+$)(?![0-9._~!@#$^ &*]+$)[a-zA-Z0-9._~!@#$^&*]{8,20}$/
显然是错误的。
我不知道如何用正则描述四选三逻辑。需要帮助。
最佳答案
不要为此使用单个正则表达式,它会太复杂,因为您必须写出 4 个选项的每个可能的 3 组合,并使用 |< 在每个组合之间交替。/
。将每个测试拆分为单个正则表达式,然后检查以编程方式通过了多少测试:
const test = (str) => {
const hasUpper = /[A-Z]/.test(str);
const hasLower = /[a-z]/.test(str);
const hasNumbers = /\d/.test(str);
const hasSpecial = /[._~!@#$^&*]/.test(str);
if (hasUpper + hasLower + hasNumbers + hasSpecial < 3) {
return false;
}
if (str.toLowerCase().includes('administrator')) {
return false;
}
return str.length >= 8 && str.length <= 30;
};
如果您还想确保字符串中不存在除所描述的字符之外的任何字符,则:
const hasOther = /[^a-z\d._~!@#$^&*]/i.test(str);
if (hasOther) {
return false;
}
关于javascript - 正则表达式(正则四选三逻辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61071544/