PHP:简单,如果字符串是十六进制验证?

时间:2010-04-15 06:23:55

标签: php encryption binary hex

我不知道如何验证这个字符串。我只是提供一个加密的IV,但是找不到1is_hex()1或类似的功能,我无法绕过它!我在php文档(用户贡献,注释)中阅读了一条评论:

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

但这似乎根本不起作用......它只是说错了。 如果它有助于我输入我的IV:

92bff433cc639a6d

7 个答案:

答案 0 :(得分:54)

使用功能: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由所有十六进制数字组成。

答案 1 :(得分:3)

有没有理由不与像“[0-9A-Fa-f] +”这样的简单RE匹配? (编辑:可能在开头是'^',在结尾有'$',以确保你匹配整个字符串。)

答案 2 :(得分:1)

您的输入太大。来自dexhex的PHP手册

  

可以转换的最大数字是4494967295(十进制)   导致“ffffffff”

因此,您最好使用RegEx,这已经由其他人提供。

答案 3 :(得分:1)

检查HEX字符串的完美方法适用于PHP 4及以上版本。

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

答案 4 :(得分:1)

没有ctyperegex的另一种方式:

$str = 'string to check';

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

答案 5 :(得分:0)

这也是可能而且非常简单

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

答案 6 :(得分:0)

添加不区分大小写的&#39; i&#39;标志

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