我不知道如何驗證這個字符串。我只是提供一個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