PHP: Простой, Validate, если строка hex?
Я не знаю, как проверить эту строку. Я просто поставляю IV для шифрования, но не могу найти 1is_hex() 1 или аналогичную функцию, я наклоняю голову вокруг него! Я прочитал комментарий в документации php (примечания пользователя):
if($iv == dechex(hexdec($iv))) {
//True
} else {
//False
}
Но это, похоже, не работает вообще. Оно говорит только ложно.
Если это поможет моему вводу моего IV, это будет следующим:
92bff433cc639a6d
Ответы
Ответ 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', ...