0

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

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

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

在此站点上测试时工作正常 。
在 Oracle 中使用 REGEXP_LIKE 函数测试时不起作用。
怎么了?

4

1 回答 1

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_]*
于 2013-04-24T14:47:48.133 回答