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

时间:2011-04-29 14:57:23

标签: regex posix oracle-apex

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

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

最终我需要验证密码:

  • 长度在14到18个字符之间
  • 至少有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广泛的验证选项,我现在已经放弃了正则表达式。

它具有内置的功能,可以说“[expression1]中的项目必须包含[expression2]中列出的至少一个字符”。不幸的是,它需要我写多个验证(我现在最多6个)。

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

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

1 个答案:

答案 0 :(得分: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.

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