2013-04-24 117 views
0

我想創建一個正則表達式來驗證用戶的Oracle數據庫新密碼。
條件:
- 長至少8個字符
- 它必須以小寫字母開頭
- 它必須包含至少2位
- 它必須包含至少1個大寫字母
- 下劃線是唯一特殊字符允許_
Oracle密碼正則表達式

這是我走到這一步:

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

當o測試工作正常n this site.
在Oracle中使用REGEXP_LIKE函數進行測試時不起作用。
有什麼問題?

+1

Oracle不支持正/負查找屁股(或aheads)...爲什麼你隨意限制密碼這樣的嗎? – Ben 2013-04-24 10:12:04

+2

我的建議是,你劃分支票並使用多個表達式。 這樣代碼將更容易維護。 – 2013-04-24 10:30:58

回答

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