为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

烙印99 2022-06-16 10:34:58
密码要求:密码必须包含大写字母、小写字母、数字和特殊字符三种类型,长度在8-30个字符之间。密码不能包含“管理员”字符串我写的规律/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z._~!@#$^&*]+$)(?![a-z0-9]+$)(?![a-z._~!@#$^&*]+$)(?![0-9._~!@#$^&*]+$)[a-zA-Z0-9._~!@#$^&*]{8,20}$/ 显然错了。不知道怎么用正则描述四选三的逻辑。需要帮助。
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

不要为此使用单个正则表达式,这太复杂了,因为您必须写出 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;

}


查看完整回答
反对 回复 2022-06-16
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

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')){

  return false;

}


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信