javascript - 正则表达式(正则四选三逻辑)

标签 javascript regex

密码要求:

密码必须包含大写字母、小写字母、数字和特殊字符三种类型,长度在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/

相关文章:

javascript - Azure 服务器无法对请求进行身份验证。确保授权 header 的值格式正确,包括签名

c# - 帮助正则表达式

java - 字符串内的单词替换

javascript - 表单验证文本框数字为 0 - 99,如果没有警报

javascript - Chrome.storage.sync - 会保留他们的数据吗?

javascript - Summernote 不会编辑其内容

java - 为什么 scala.util.matching.Regex 'apparently' 在 Scala 提取器中失败?

javascript - 为什么这个 Angular 2 Pipe 不返回数据?

regex - 是否有正则表达式可以检测有效的正则表达式?

regex - Git 搜索内容中包含特定 unicode 字符的提交