如何在 ORACLE APEX 中将特殊字符列入白名单
How to whitelist special characters in ORACLE APEX
我只是想知道如何最大限度地利用 regexp_like 将特殊字符列入白名单。当声明值为 $
时,结果为无效
白名单
- 字符 - $“-/?!%.,:;'()
- 字母和数字 - A-Z、a-z、0-9
下面是我的代码
declare
l_value varchar2(32767) := '$';
begin
if regexp_like(l_value,'[a-zA-Z0-9]$“-/\?!%.,:;’()') then
dbms_output.put_line('valid');
else
dbms_output.put_line('invalid');
end if;
end;
谢谢大家
您的代码有几个问题:
- 所有字符都应该在方括号之间,方括号表示要加入白名单的字符列表
- 只要 class 中的
l_value
中有单个字符,它就会呈现有效。为避免检查开始 ^
和结束 $
之间的所有字符
DECLARE
l_value varchar2(32767) := '$';
BEGIN
IF REGEXP_LIKE(l_value,'^[a-zA-Z0-9$"/\?!%.,:;’()-]*$') THEN
dbms_output.put_line('valid');
ELSE
dbms_output.put_line('invalid');
END IF;
END;
/
使用 select 中的一组样本数据进行测试更容易 - 如下所示:
WITH sampledata (v) AS
(
SELECT '$' FROM dual UNION ALL
SELECT '$foo' FROM dual UNION ALL
SELECT '+' FROM dual UNION ALL
SELECT '_' FROM dual UNION ALL
SELECT 'f_oo' FROM dual
)
SELECT * FROM sampledata
WHERE REGEXP_LIKE(v,'^[a-zA-Z0-9$"/\?!%.,:;’()-]*$');
我只是想知道如何最大限度地利用 regexp_like 将特殊字符列入白名单。当声明值为 $
时,结果为无效白名单
- 字符 - $“-/?!%.,:;'()
- 字母和数字 - A-Z、a-z、0-9
下面是我的代码
declare
l_value varchar2(32767) := '$';
begin
if regexp_like(l_value,'[a-zA-Z0-9]$“-/\?!%.,:;’()') then
dbms_output.put_line('valid');
else
dbms_output.put_line('invalid');
end if;
end;
谢谢大家
您的代码有几个问题:
- 所有字符都应该在方括号之间,方括号表示要加入白名单的字符列表
- 只要 class 中的
l_value
中有单个字符,它就会呈现有效。为避免检查开始^
和结束$
之间的所有字符
DECLARE
l_value varchar2(32767) := '$';
BEGIN
IF REGEXP_LIKE(l_value,'^[a-zA-Z0-9$"/\?!%.,:;’()-]*$') THEN
dbms_output.put_line('valid');
ELSE
dbms_output.put_line('invalid');
END IF;
END;
/
使用 select 中的一组样本数据进行测试更容易 - 如下所示:
WITH sampledata (v) AS
(
SELECT '$' FROM dual UNION ALL
SELECT '$foo' FROM dual UNION ALL
SELECT '+' FROM dual UNION ALL
SELECT '_' FROM dual UNION ALL
SELECT 'f_oo' FROM dual
)
SELECT * FROM sampledata
WHERE REGEXP_LIKE(v,'^[a-zA-Z0-9$"/\?!%.,:;’()-]*$');