Oracle密码正则表达式

时间:2013-04-24 09:57:58

标签: regex oracle11g passwords oracle-apex

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

这是我到目前为止所得到的:

^(?=[a-z])(?=.*[\d]{2,})(?=.*[A-Z]{1,})[0-9a-zA-Z_]{8,}$

测试时工作正常 this site.
在使用REGEXP_LIKE函数在Oracle中测试时不起作用 怎么了?

1 个答案:

答案 0 :(得分:0)

请尝试以下操作 长度单独检查。

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_]*