你錯過了周圍的第一個字符類中的冒號,[[alnum]]
:
'^[[:alnum:]]([^[:alnum:]]|\"+|\.+)'
例如
select case when regexp_like('d[av inder 1234',
'^[[:alnum:]]([^[:alnum:]]|\"+|\.+)')
then 0 else 1 end as vintResult from dual;
VINTRESULT
----------
0
或者:
DECLARE
vintResult NUMBER DEFAULT NULL;
BEGIN
select case when regexp_like('d[av inder 1234' ,'^[[:alnum:]]([^[:alnum:]]|\"+|\.+)') then 0 else 1 end into vintResult from dual;
dbms_output.put_line('result: '||vintResult);
END;
/
PL/SQL procedure successfully completed.
result: 0
如果你允許在第一位置的任何字符,你可以只使用一個點:
'^.([^[:alnum:]]|\"+|\.+)'
...但我懷疑你只能做希望字母數字處於第一位。如果你有一個要排除的特定字符的清單,那麼它可能會更清楚,尤其是對於將來有人維護這個字符的人來說,要列出這些字符而不是使用第二個字符類 - 就像在@KevinEsche的回答中一樣。 (我不確定你的模式與你想禁止的模式完全相符)。
DECLARE
vintResult NUMBER DEFAULT NULL;
BEGIN
select case when regexp_like('d[av inder 1234' ,'^.[][[email protected]#$%^&*()_+=`~{}''\|?/><,;:].*')
then 0 else 1 end into vintResult from dual;
dbms_output.put_line('result: '||vintResult);
END;
/
PL/SQL procedure successfully completed.
result: 0
請注意將方括號放置在已從原始字符串移出的字符組中;這是爲了防止他們被誤解爲早日結束團隊。
editted的coluns中。 我確實有他們在我的代碼,但忘了把它們寫在這裏。儘管如此, 仍然沒有工作。 我如何使用一個字符列表來禁止?我應該使用什麼樣的模式? –
@DrorCohen - 您的代碼按照預期的方式與列一起運行(無論如何,固定了變量名稱聲明)。所以不知道你在做什麼不同。 –
我測試了你建議的模式「^ [[:alnum:]]([^ [:alnum:]] | \」+ | \。+)'「 當把char從[改變爲'我仍然得到結果:0,但它應該是1因爲'是允許的 –