この文字列を検証する方法がわかりません。暗号化用のIVを提供しているだけですが、1is_hex()1または同様の関数が見つからないため、頭を包むことができません。私はphpドキュメント(ユーザー投稿メモ)のコメントを読んだ:これ:
if($iv == dechex(hexdec($iv))) {
//True
} else {
//False
}
しかし、それはまったく機能していないようです。それが私のIVの入力に役立つ場合は、次のようになります。
92bff433cc639a6d
関数を使用する: ctype_xdigit
<?php
$strings = array('AB10BC99', 'AR1012', 'ab12bc99');
foreach ($strings as $testcase) {
if (ctype_xdigit($testcase)) {
echo "The string $testcase consists of all hexadecimal digits.\n";
} else {
echo "The string $testcase does not consist of all hexadecimal digits.\n";
}
}
?>
上記の例は次のように出力します。
AB10BC99
はすべて16進数で構成されます。AR1012
はすべて16進数で構成されているわけではありません。ab12bc99
はすべて16進数で構成されます。「[0-9A-Fa-f] +」のような単純なREと一致しない理由はありますか? (編集:文字列全体が一致していることを確認するために、最初に「^」、最後に「$」を付けることができます)。
ctype
またはregex
を使用しない別の方法:
$str = 'string to check';
if (trim($str, '0..9A..Fa..f') == '') {
// string is hexadecimal
}
大文字と小文字を区別しない「i」フラグを追加します
preg_match('/^[0-9a-f]+$/i', ...
HEX文字列をチェックする完璧な方法は、PHP 4以降で機能します。
<?php
function is_hex($hex_code) {
return @preg_match("/^[a-f0-9]{2,}$/i", $hex_code) && !(strlen($hex_code) & 1);
}
?>
入力が大きすぎます。 PHPマニュアル dexhex
変換できる最大数は10進数で4294967295であり、「ffffffff」になります。
したがって、他の人からすでにここで提供されているRegExを使用したほうがよいでしょう。
これも可能で、非常に簡単です
$a="affe"; //is_hex
$b="a0bg"; //is_not_hex
if(is_numeric('0x'.$a)) echo 'is_hex';
else echo 'is_not_hex';
if(is_numeric('0x'.$b)) echo 'is_hex';
else echo 'is_not_hex';