【问题标题】:Searching for alphanumeric passwords in regex在正则表达式中搜索字母数字密码
【发布时间】:2019-06-10 13:16:28
【问题描述】:

我一直在尝试创建一个可以检测长度在 5-20 个字符之间的字母数字密码的正则表达式。这些密码可以包含特殊字符 (@$!%*#?&£)。我的尝试要么没有检测到我的所有测试用例,要么会产生大量误报。

Regex 目前看起来像这样:

\b(?=.*[a-zA-Z])(?=.*\d*)(?=.*[@$!%*#?&£]*)[a-zA-Z\d@$!%*#?&£]{5,20}(?<![a-zA-Z ])\b

Here is my Regex running on Regexr with my test cases

正则表达式的标准如下:

  • 检测长度在 5 到 20 个字符之间的混合字母数字单词
  • 检测特殊符号(@$!%*#?&amp;£ 等)

在编写原始正则表达式时,我在应用字符边界时遇到了很多问题,比如说如果一个单词是 21 个字符,我根本不希望它被检测到。我基本上只想扫描此长度之间的项目,但此边界已阻止检测到许多匹配项。

获取字符串“Rese7”和“Rese7A”。 第一个字符串匹配 && 第二个不匹配,我怀疑这是因为我如何实现字符检查。我基本上希望正则表达式做以下事情:

  • 将单词定义为任意字符(包括特殊字符)
  • 查找长度在 5-20 个字符之间的单词
  • 检查它们是否是字母数字(aA-zZ0-9!£$ 等)
  • 仅匹配满足此条件的单词

我不确定我是否',考虑到这一点,我查看了其他字母数字密码问题,但答案看起来并不满足我的测试用例:

感谢您的帮助!

【问题讨论】:

    标签: regex regex-lookarounds


    【解决方案1】:
    (?:^|[^a-zA-Z\d@$!%*#?&£])[a-zA-Z\d@$!%*#?&£]{5,20}(?:$|[^a-zA-Z\d@$!%*#?&£])
    

    您需要的是字符串 ^ 的开头或不是您的可匹配字符之一 [^a-zA-Z\d@$!%*#?&amp;£] 后跟 5 到 20 个可匹配字符 [a-zA-Z\d@$!%*#?&amp;£]{5,20} 后跟字符串结尾 $ 或一个不可匹配字符再次[^a-zA-Z\d@$!%*#?&amp;£]

    正则表达式与你不想要的东西一样多

    【讨论】:

      【解决方案2】:

      在您的模式中,您使用这些积极的前瞻(?=.*\d*)(?=.*[@$!%*#?&amp;£]*),您想要断言的内容应该匹配 0+ 次使用星号 * 的数字或特殊字符。

      因此,如果它存在或不存在,断言就会为真,这将始终为真,为您提供比您预期的更多的匹配项。

      您可以使用锚点来声明字符串的开头^ 和结尾$,并省略* 以匹配它至少1 次以确保它在那里。

      (?&lt;![a-zA-Z ]) 末尾的负向查看确保左侧不是字符 a-zA-Z 或空格。您可以通过不允许空格匹配来省略它。

      但执行此规则将不允许 rese7FwDdvgfe 匹配,但在您的示例数据中您确实希望匹配它,因此您可以将后向排除在模式之外。

      ^(?=[^a-zA-Z\s]*[a-zA-Z])(?=(?:[^\d\s]*\d|[^\s@$!%*#?&£]*[@$!%*#?&£]))[@$!%*#?&£a-zA-Z\d]{5,20}$
      

      说明

      • ^ 字符串开头
      • (?=[^a-zA-Z\s]*[a-zA-Z]) 断言大写或小写 a-z
      • (?= 正向前瞻
        • (?:非捕获组
          • [^\d\s]*\d 断言一个数字
          • |或者
          • [^\s@$!%*#?&amp;£]*[@$!%*#?&amp;£] 声明一个特殊字符
        • )关闭非捕获组
      • ) 关闭正向预测
      • [@$!%*#?&amp;£a-zA-Z\d]{5,20} 匹配所有允许的 5 - 20 次
      • $ 字符串结束

      Regex demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 2019-12-08
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 2014-05-24
        相关资源
        最近更新 更多