【问题标题】:Hexadecimal validation in PLSQLPLSQL 中的十六进制验证
【发布时间】:2013-08-21 04:18:39
【问题描述】:

我需要验证一个十六进制字符串值(仅包含 A-F 或 a-f 或 0-9 以及此模式的组合)。 我也搜索了各种论坛和 SO,并找到了一些解决方案,但没有一个是令人满意的,在某些时候,其中一些没有给出适当的结果。 以下是一些示例。

translate(upper(<VALUE-TO-CHECK>), '0123456789ABCDEF', '.') != '..'

上面的代码给出了值“1234567890ABCDEF”或“000000”或“100000”等的错误结果。

REGEXP_LIKE(LTRIM(RTRIM(<VALUE-TO-CHECK>)), '[a-f|A-F|0-9].*');

上面的代码给出的值“Q1W”的结果不正确

hex_num := TO_NUMBER(<VALUE-TO-CHECK>, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
EXCEPTION
   WHEN value_error THEN -- When value_error that means not convertible to HEX value
   RETURN FALSE;

上面的代码给出了一个 64 字节长的十六进制字符值的错误结果,即“CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC”

谁能帮我验证十六进制值。

【问题讨论】:

  • regexp_like 模式中的 ^[a-fA-F0-9]*$ 可能有效。
  • 我对你提到的代码做了很多测试,到目前为止我很满意,让我们看看 QA 会如何找到它。谢谢大佬。

标签: regex validation plsql hex


【解决方案1】:
select  
  case
    when regexp_like(:str, '^[^g-zG-Z]*$') then 'Hex'
       else 'NotHex'
  end typ
  from dual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2011-12-09
    • 2011-06-01
    • 2012-01-13
    • 2012-07-10
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多