Regex Oracle密码正则表达式

Regex Oracle密码正则表达式,regex,oracle11g,passwords,oracle-apex,Regex,Oracle11g,Passwords,Oracle Apex,我想创建一个正则表达式来验证用户在Oracle数据库中的新密码。 条件: -至少8个字符长 -它必须以小写字母开头 -它必须至少包含2位数字 -它必须至少包含1个大写字母 -下划线是唯一允许的特殊字符。\ubr> 到目前为止,我得到的是: ^(?=[a-z])(?=.*[\d]{2,})(?=.*[A-Z]{1,})[0-9a-zA-Z_]{8,}$ 在上测试时效果良好 在Oracle中使用类似REGEXP_的函数进行测试时不起作用。 怎么了?试试下面的内容。 长度单独检查 select

我想创建一个正则表达式来验证用户在Oracle数据库中的新密码。
条件:
-至少8个字符长
-它必须以小写字母开头
-它必须至少包含2位数字
-它必须至少包含1个大写字母
-下划线是唯一允许的特殊字符。\ubr>

到目前为止,我得到的是:

^(?=[a-z])(?=.*[\d]{2,})(?=.*[A-Z]{1,})[0-9a-zA-Z_]{8,}$
在上测试时效果良好
在Oracle中使用类似REGEXP_的函数进行测试时不起作用。
怎么了?

试试下面的内容。
长度单独检查

select
    'matched' as STATE
  from DUAL
  where
    length('aAeaasoisd3_f') >= 8 and
    regexp_like('aAeaasoisd3_f', '^[a-z]([0-9a-zA-Z_]*[0-9][0-9a-zA-Z_]*[0-9][0-9a-zA-Z_]*[A-Z][0-9a-zA-Z_]*|[0-9a-zA-Z_]*[A-Z][0-9a-zA-Z_]*[0-9][0-9a-zA-Z_]*[0-9][0-9a-zA-Z_]*|[0-9a-zA-Z_]*[0-9][0-9a-zA-Z_]*[A-Z][0-9a-zA-Z_]*[0-9][0-9a-zA-Z_]*)');
通过将可能性划分为

^[a-z]X where X could be one of
    ...\d...\d...[A-Z]...
    ...[A-Z]...\d...\d...
    ...\d...[A-Z]...\d...
and ... is [0-9a-zA-Z_]*

Oracle不支持消极/积极的后视(或前视)。。。你为什么要这样任意地限制你的密码?我的建议是你把支票分开,使用不止一个表达式。这样代码将更易于维护。