我不知道如何验证这个字符串。我只是提供一个IV加密,但可以找到没有1is_hex()1或类似的功能,我无法用头围住它!我读的PHP文件中评论这个(用户的contrib说明。):PHP:简单,验证如果字符串是十六进制?
if($iv == dechex(hexdec($iv))) {
//True
} else {
//False
}
但是,这似乎并没有在所有的工作。它只是说假的。 如果它帮助我我的IV的投入将是这样的:
92bff433cc639a6d
我不知道如何验证这个字符串。我只是提供一个IV加密,但可以找到没有1is_hex()1或类似的功能,我无法用头围住它!我读的PHP文件中评论这个(用户的contrib说明。):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
由所有十六进制数字。AR1012
不包含所有十六进制数字。ab12bc99
由所有十六进制数字组成。有什么理由不来匹配一个简单的重像“[0-9A发-F] +”? (编辑:在开始时可能带有'^',末尾带有'$'以确保您匹配了整个字符串)。
我试过, $ IV = “92bff433cc63da6W” 如果( preg_match('/ [0-9A-Fa-f] + /',$ iv)){$ enc = mcrypt_encrypt(MCRYPT_BLOWFISH,$ key,$ data,MCRYPT_MODE_CBC,包( “H *”,$ IV)); $ ENCRSLT = bin2hex($ enc); } else { $ ENCRSLT =“错误:密钥或IV不是十六进制,有效字符:0-9a-f。”; } 但它不验证(最后显而易见的W) – 2010-04-15 06:29:52
糟糕,注释不会格式化,对不起。大声笑 – 2010-04-15 06:30:14
去正则表达式:“^ [0-9a-f] $”由杰里建议。根据您粘贴的错误信息,不支持大写的A-F。 – 2010-04-15 06:32:49
您的输入太大。从dexhex
The largest number that can be converted is 4294967295 in decimal resulting to "ffffffff"
PHP手册所以你会更好使用正则表达式,它已经被其他人提供在这里。
十六进制是一个8字节的字符串,而不是一个数字,正则表达式和更好的ctype_xdigit做的工作。 – 2010-04-15 06:42:08
这也是可能的,很简单
$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';
而且相当昂贵。 – caiosm1005 2014-05-01 21:29:45
在PHP 7中不再允许,请参阅“十六进制字符串不再被视为数字”http://php.net/manual/en/migration70.incompatible.php – 2016-09-20 21:52:26
检查十六进制字符串最完美的方式从PHP 4及以上的作品。
<?php
function is_hex($hex_code) {
return @preg_match("/^[a-f0-9]{2,}$/i", $hex_code) && !(strlen($hex_code) & 1);
}
?>
添加不区分大小写的 'i' 标志
preg_match('/^[0-9a-f]+$/i', ...
的另一种方式,而不ctype
或regex
:
$str = 'string to check';
if (trim($str, '0..9A..Fa..f') == '') {
// string is hexadecimal
}
谢谢!有时我只是不喜欢使用正则表达式,我很高兴那里有一些准系统。下次在函数列表中必须多看一些。 – 2010-04-15 06:39:53