PLSQL中的十六进制验证

问题描述 投票:0回答:1

我需要验证十六进制字符串值(仅包含A-F或a-f或0-9以及此模式的组合)。我也搜索了varioud论坛和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'

任何人都可以请我帮助验证十六进制值。

regex validation plsql hex
1个回答
-2
投票
select  
  case
    when regexp_like(:str, '^[^g-zG-Z]*$') then 'Hex'
       else 'NotHex'
  end typ
  from dual
© www.soinside.com 2019 - 2024. All rights reserved.