Подтвердить что ты не робот

PHP: Простой, Validate, если строка hex?

Я не знаю, как проверить эту строку. Я просто поставляю IV для шифрования, но не могу найти 1is_hex() 1 или аналогичную функцию, я наклоняю голову вокруг него! Я прочитал комментарий в документации php (примечания пользователя):

if($iv == dechex(hexdec($iv))) {
  //True
} else {
  //False
}

Но это, похоже, не работает вообще. Оно говорит только ложно. Если это поможет моему вводу моего IV, это будет следующим:

92bff433cc639a6d
4b9b3361

Ответ 1

Использовать функцию: 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 состоит из всех шестнадцатеричных цифр.
  • Строка AR1012 не состоит из всех шестнадцатеричных цифр.
  • Строка ab12bc99 состоит из всех шестнадцатеричных цифр.

Ответ 2

Есть ли какая-либо причина не соответствовать простому RE как "[0-9A-Fa-f] +"? (отредактируйте: возможно, с "^" в начале и "$" в конце, чтобы убедиться, что вы соответствовали всей строке).

Ответ 3

Ваш вход слишком велик. Из руководства по PHP dexhex

Максимальное число, которое может быть преобразовано, - 4294967295 в десятичном в результате получается "ffffffff"

Итак, вам будет лучше использовать RegEx, которые уже были предоставлены другими пользователями.

Ответ 4

Идеальный способ проверки строки HEX работает с PHP 4 и выше.

<?php
function is_hex($hex_code) {
        return @preg_match("/^[a-f0-9]{2,}$/i", $hex_code) && !(strlen($hex_code) & 1);
}
?>

Ответ 5

Другой способ без ctype или regex:

$str = 'string to check';

if (trim($str, '0..9A..Fa..f') == '') {
    // string is hexadecimal
}

Ответ 6

Это также возможно и довольно просто

$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';

Ответ 7

Добавить нечувствительный к регистру флаг "i"

preg_match('/^[0-9a-f]+$/i', ...