我得到了一個可接受字符的串列,如果一個字串包含不在此白名單中的任何字符,我需要查詢來識別它們。這可以通過來自 DUAL 的 SELECT 查詢或通過 pl/sql 中的匿名塊來完成。
有沒有一種方法可以在不回圈的情況下回傳包含輸入字串中非白名單字符的字串?
對于我的要求,白名單字符是:
- 所有號碼
- 所有字母,大寫和小寫
- 括弧
- 大括號
- 方括號
- 破折號和下劃線
- 加號和等號
- 逗號
- 正斜杠 (/) 和管道
我可以做類似的事情:
declare
myInputString varchar2(256);
myDirtyCharacters varchar2(256);
begin
myInputString := '(This is a 123 [email protected]!)';
myDirtyCharacters := regexp_replace(myInputString,'someRegex');
dbms_output.put_line('Identified dirty characters: ' || myDirtyCharacters);
end;
然后,我希望該myDirtyCharacters字串將包含所有未列入白名單的字符。在我的情況下,它將是“@!”,因為 at 符號和感嘆號是唯一未列入白名單的字符。
該regexp_replace功能的使用不是必需的。可以使用任何非回圈方法。
uj5u.com熱心網友回復:
一個(相對)簡單的選項(從我的角度來看)是嵌套的組合
TRANSLATE將洗掉除字母和數字之外的所有白名單字符的函式,REGEXP_REPLACE從剩下的內容中洗掉字母數字,TRIM洗掉不必要的空格字符
像這樣的東西
SQL> with test (col) as
2 (select '(This (is) a {123 minus - [email protected]! 1 1=2/2 2=4/4)' from dual)
3 select trim(regexp_replace(translate(col, 'a(){}[]-_ =,/|', 'a'), '[[:alnum:]]', '')) result
4 from test;
RES
---
@.!
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/407681.html
標籤:
