You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ORACLE APEX中使用regexp_like实现特殊字符白名单校验

Oracle regexp_like特殊字符白名单校验失效问题解决方案

问题原因

你的正则写法存在三处错误,直接导致$字符校验不通过:

  • 特殊字符未纳入匹配集合:你把$等允许的特殊字符写在了字符集[]的外面,[]仅包裹了大小写字母和数字,只有这部分字符会被判定为合法,$不在匹配范围内自然返回无效。
  • 连字符位置错误:字符集内部的-放在“和/之间,会被正则解析为ASCII码范围匹配,而非匹配普通的-字符。
  • 缺少全文校验规则:现有正则只要字符串内存在任意一个允许的字符就会返回真,无法校验整个字符串所有字符都符合白名单要求,存在漏判风险。

修正后代码

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;
/

修改说明

  • 所有允许的特殊字符全部移入[]字符集内部,确保$等字符被纳入白名单
  • 将连字符-移动到字符集的末尾位置,避免被识别为范围运算符,仅作为普通特殊字符匹配
  • 增加开头锚点^、结尾锚点$和量词+,强制校验整个字符串的每一个字符都属于白名单范围,避免漏判
  • 字符集内部的$不需要额外转义,在Oracle正则的[]范围内$没有特殊含义,直接书写即可正常匹配

内容的提问来源于stack exchange,提问作者stummyhurts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:45:02