当前位置: 首页 > 知识库问答 >
问题:

匹配有密码限制的连续字符

谭健柏
2023-03-14

大家好,我正在尝试匹配以下正则表达式:

  • 最少字符数:8
  • 最大字符数:22
  • 最小大写字母:1
  • 最小小写字母:1
  • 最小位数:2
  • 允许使用特殊字符
  • 第一个字符必须是字母
  • 最大连续相同字符数:2

我已经设法完成了每一个条件,但连续的条件是:

(?=^.{8,22}$)(?=(.*\d){2})(?=(.*[A-Z]))^[a-zA-Z].*$

遵循后正则表达式不超过2个相同的连续字符和a-Z和0-9,我发现不匹配精确字符的方法是:

((.)\2?(?!\2))+

但是我无法混合它们并获得完整的匹配结果。尝试在这里完成:https://regex101.com/r/94KaXO/1/第一个字符串应该匹配但不匹配第二个字符串的位置。

提前谢谢。

共有1个答案

何博涛
2023-03-14

您可以使用

^(?=.{8,22}$)(?!.*(.)\1{2})(?=(?:\D*\d){2})(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])[a-zA-Z].*$

请参阅正则表达式演示。

细节:

  • ^-字符串的开头
  • (?=.{8,22}$)-字符串中允许8到22个字符,而不是换行符
  • (?!.*(.)\1{2})-在零个或更多字符之后,不允许有3个连续的相同字符,但换行符除外
  • (?=(?:\D*\D){2})-字符串中必须至少有2个不一定连续的数字
  • (?=[^A-Z]*[A-Z])-字符串中必须至少有一个大写字母
  • (?=[^a-z]*[a-z])-字符串中必须至少有2个小写字母
  • 一个字母
  • <代码>* -除换行符外,尽可能多的零个或多个字符
  • $字符串结束

 类似资料:
  • 我目前正在学习Spring Boot framework,并试图按照baledung页面上的指南创建一个自定义字段匹配验证器。 我的代码实际上和上面的页面一样,唯一不同的是我用BCryptPasswordEncoder编码了密码。 这是我的用户类。 控制器: 注册用户方法: 我收到了以下错误: 我认为编码的密码正在与未编码的验证密码进行比较。这就是为什么我收到这个错误或?我怎么才能修好它?如果我也

  • 我正在努力提高我的正则表达式技能。我做不了这个练习。 https://alf.nu/RegexGolf 您必须匹配没有连续相同字符的单词。为了清楚起见,我们应该避免像abba、baab、czzc这样的模式。 我看到的唯一方法是使用捕获组: 然后进行负面展望: 但在网站上,它不工作,因为它不匹配任何东西。 有什么建议吗?谢谢

  • 我正在尝试使用javax.crypto.ciper加密/解密数据,其中我将转换指定为aes/ecb/pkcs5padding。 在我的本地机器中,jcesecurity.isrestricted()返回FALSE,但是当它在服务器上运行时,相同的方法返回true。由于服务器上的这种情况,系统不会为密码分配正确的权限。 不确定,JceSecurity restriction确切设置在哪里。感谢你的帮

  • 我有连续的类似货币的字符串序列,如: 我想使用正则表达式来覆盖连续的钱的序列,如字符串到钱类型或在Dart双精度像: 连续货币类字符的输入序列字符串长度为15。 我只是尝试学习正则表达式,并尝试使用: 但它潜入字符串,不添加。在空白空间中: 如我在Dart中所述,转换上述格式的正确正则表达式模式是什么?

  • 我的密码应类似于: “密码应包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,长度至少为八个字符” 我使用的模式是:

  • 我有像20210215和14032020这样的连续日期字符,我正在尝试将其转换为像2021.02.15和14.03.2020这样的日期字符串 我的第一个问题是连续的字符,它是2格式类型。喜欢: 我的第二个问题是在不更改格式的情况下将它们转换为日期字符串。比如: 当我搜索about regex时,找不到任何模式来将上面的{20210215}连续字符示例转换为date {2021.02.15}字符串。