PHP: просто, проверить, если строка шестнадцатеричная? - PullRequest
26 голосов
/ 15 апреля 2010

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

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

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

92bff433cc639a6d

Ответы [ 7 ]

54 голосов
/ 15 апреля 2010

Используйте функцию: 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 состоит из всех шестнадцатеричных цифр.
3 голосов
/ 15 апреля 2010

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

1 голос
/ 25 апреля 2017

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

$str = 'string to check';

if (trim($str, '0..9A..Fa..f') == '') {
    // string is hexadecimal
}
1 голос
/ 07 августа 2015

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

preg_match('/^[0-9a-f]+$/i', ...
1 голос
/ 29 марта 2014

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

<?php
function is_hex($hex_code) {
        return @preg_match("/^[a-f0-9]{2,}$/i", $hex_code) && !(strlen($hex_code) & 1);
}
?>
1 голос
/ 15 апреля 2010

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

Наибольшее число, которое можно преобразовать, - это 4294967295 в десятичном виде. в результате чего "ffffffff"

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

0 голосов
/ 05 июня 2013

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

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