我需要验证一个十六进制字符串值(仅包含 AF 或 af 或 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”
谁能帮我验证十六进制值。