首页 > 解决方案 > 不允许正则表达式 大写字母后跟小写字母后跟数字后跟特殊字符

问题描述

正则表达式需要匹配以下格式

  1. 至少 1 个大写字母
  2. 最少 1 个小写字母
  3. 最少 1 个数字案例
  4. 最少 1 个特殊字符

不允许连续超过两个相同的字符

但是我们不想遵循下面的特定 Patten(首字母大写,后跟数字,后跟特殊字符-(例如,Fall2015!))表示大写后跟小写后跟数字后跟特殊字符

(?=.{8,24}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[_.!@$*=-?#])(([A-Za-z0-9_.!@$*=-?#])\2?(?!\2))

标签: regex

解决方案


尝试这个:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_.!@$*=?#-])(?!.*(.)\1\1)(?!.*[A-Z][a-z]+\d+[_.!@$*=?#-])[\w.!@$*=?#-]{8,24}$

主要变化是:

  • ^锚定表达式开始
  • (?!.*(.)\1\1)这可以防止三倍的字符
  • (?!.*[A-Z][a-z]+\d+[_.!@$*=?#-])防止像“Fall2015!”这样的输入</li>
  • [\w.!@$*=?#-]{8,24}$将输入限制为仅这些字符且仅 8-24 长度
  • 将连字符移动到 char 类的末尾,使其成为文字连字符(不是范围)

还要注意\das shorthand for[0-9]\was shorthand for的介绍[a-zA-Z0-9_]


推荐阅读