regex - 用于密码验证的 Oracle APEX POSIX 实现 REGEX

标签 regex posix oracle-apex

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

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

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

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

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

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

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

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

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

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

    编辑

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

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

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

    总而言之,它对我来说仍然感觉像是一个黑客,我仍然有兴趣了解正则表达式背后的 secret 。

    最佳答案

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

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

    关于regex - 用于密码验证的 Oracle APEX POSIX 实现 REGEX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833704/

    相关文章:

    oracle-apex - 顶点 5 : Dynamic action set page item value

    oracle - HTP.P 不再在应用程序中工作

    python - grep 和 Python

    regex - extjs 输入文本 maskRe

    python - python中的whoami

    linux - mremap 可以将映射放置在 0 处吗?

    regex - 从正则表达式组中删除字符

    regex - 匹配方括号的正则表达式是什么?

    C 如何指定以空行开始并以空行结束的 POSIX 正则表达式?

    graph - 如何调整 APEX 中图形/图表的范围?