0

16 進数の文字列値 (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 バイト長の 16 進文字値、つまり「CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC」に対して誤った結果を返しています。

誰でも16進数値を検証するのを手伝ってくれますか?

4

1 に答える 1