在过去的4个小时里,我可能已经阅读了20多种不同风格的同一个问题但没有出现正面结果。
我正在尝试通过Oracle APEX应用程序中的正则表达式验证密码,根据我的理解,使用正则表达式的POSIX实现,这显然比大多数版本的正则表达式更“严格”引擎? (我还没有专门验证这一点,但我的测试会让我相信这是真的)
最终我需要验证密码:
我尝试了几种正则表达式,即使是最简单的形式也无法在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个)。
从好的方面来说,它允许我显示多条错误消息,当用户更新新密码时,错误消息会在用户满足要求时被删除....
总而言之,它对我来说仍然感觉像是一个黑客,我仍然有兴趣了解正则表达式背后的秘密。
答案 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.
(?=)
是一个环视组,用于验证是否可以进行此匹配,但不捕获任何内容。即成功后,它会回到字符串中的前一个位置......在这种情况下,^
开头。