【问题标题】:Oracle APEX POSIX-implementation REGEX for Password Validation用于密码验证的 Oracle APEX POSIX 实施 REGEX
【发布时间】:2011-04-29 14:57:22
【问题描述】:

在过去的 4 小时内,我可能已经阅读了 20 多种不同风格的同一个问题,但没有得到积极的结果。

我正在尝试通过 Oracle APEX 应用程序中的正则表达式验证密码,据我了解,该应用程序使用正则表达式的 POSIX 实现,这显然是比大多数正则表达式版本更“严格”的引擎??? (我还不能具体验证这一点,但我的测试会让我相信这是真的)

最终我需要验证一个密码:

  • 长度介于 14 到 18 个字符之间
  • 至少有 1 个小写字符
  • 至少有 1 个大写字符
  • 至少有 1 位数字
  • 至少具有以下特殊字符之一#$^+=!*()@%&

我尝试了几个正则表达式,即使是最简单的形式,它们也不能在 Apex 实现中工作。

例如:

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$

理论上应该接受任何输入字符串,只要它至少有 1 个数字、1 个大写字母和 1 个小写字符。

只需输入“wS1”即可使用Javascript RegExp: Regular Expression Tester。它将字符串作为匹配项返回。

如果我使用相同的 RegExp 作为正则表达式验证器并在字段中输入“wS1”,则验证失败。

在这个特定的正则表达式实现中我是否缺少一些我需要注意的东西?

编辑

由于 Apex 的广泛验证选项,我暂时放弃了正则表达式。

它具有内置功能,例如“[表达式1] 中的项目必须包含[表达式2] 中列出的至少一个字符”。不幸的是,它需要我编写多个验证(我现在最多 6 个)。

从好的方面来说,它允许我显示多个错误消息,并且当用户更新他们的新密码时,错误消息会在用户满足要求时被删除......

总而言之,这对我来说仍然是一种 hack,我仍然有兴趣了解正则表达式背后的秘密。

【问题讨论】:

    标签: regex posix oracle-apex


    【解决方案1】:

    这个正则表达式应该适合你:

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{14,18}$
    

    解释:

    ^                     #The Start of the string.
    (?=.*[a-z])           #Any chars and then a lowercase.
    (?=.*[A-Z])           #Any chars and then an uppercase.
    (?=.*\d)              #Any chars and then a digit.
    (?=.*[#$^+=!*()@%&])  #Any chars and then a char from the list.
    .{14,18}              #After matching each of the previous, match 14 to 18 of any char.
    $                     #The end of the String.
    

    (?=) 是一个环视组,它验证可以进行此匹配,但不捕获任何内容。即成功后它会回到字符串中的前一个位置......在这种情况下,^ 开头。

    【讨论】:

      猜你喜欢
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      相关资源
      最近更新 更多