繁体   English   中英

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

[英]Regex not allowed Capital letter followed by lower case letters followed by number followed by special character

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

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

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

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

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

看起来以下应该勾选您的框:

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

查看在线演示

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

尝试这个:

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

主要变化是:

  • ^锚定表达式开始
  • (?..*(.)\1\1)防止三倍字符
  • (?..*[AZ][az]+\d+[_?!@$*=?#-])以防止像“Fall2015!”这样的输入
  • [\w.?@$*=,#-]{8,24}$将输入限制为仅这些字符且仅 8-24 长度
  • 将连字符移动到字符 class 的末尾,因此它是文字连字符(不是范围)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM