正则表达式不允许大写字母后跟小写字母后跟数字后跟特殊字符

时间:2021-02-19 21:00:25

标签: regex

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

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

不允许连续出现两个以上相同的字符

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

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

2 个答案:

答案 0 :(得分:0)

看起来以下内容应该打勾:

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

查看在线demo

  • ^ - 起始字符串锚点。
  • (?! - 负面预测:
    • [A-Z][a-z]+\d+[.!@$*=?#-]$ - 要否定的文字模式:一个大写字母、1 个以上小写字母、1 个以上数字和字符串结尾前的一个特殊字符。
    • | - 或:
    • .*(.)\1\1 - 断言位置在三个相同字符的任何位置都没有以下序列:0+ 个字符、第一个捕获组和对该组的两个直接反向引用。
    • ) - 关闭否定前瞻。
  • (?=.*[A-Z]) - 在字符串中断言大写字母的正向预测。
  • (?=.*[a-z]) - 在字符串中断言小写字母的正向预测。
  • (?=.*\d) - 在字符串中断言数字的正向预测。
  • (?=.*[.!@$*=?#-]) - 断言字符串中特殊字符的正向预测。
  • .{8,24} - 除换行符以外的任何 8-24 个字符。
  • $ - 结束字符串锚点。

答案 1 :(得分:0)

试试这个:

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

主要变化是:

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

还要注意引入 \d 作为 [0-9] 的简写和 \w 作为 [a-zA-Z0-9_] 的简写。

相关问题