PHP: string onaltılık ise basit, doğrulama?

8 Cevap php

Ben nasıl bu dizeyi doğrulamak için hiçbir ipucu var. Ben sadece bir şifreleme için bir IV temin ediyorum, ama hayır "is_hex ()" veya benzer işlevi bulabilirsiniz, ben etrafında başımı sarmak olamaz! Ben (. Kullanıcı contrib notları) Bu php belgelerde bir yorumum okuyun:

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

But that doesn't seem to work at all.. It only says false. If it helps my input of my IV would be this:

92bff433cc639a6d

8 Cevap

ctype_xdigit: işlevini kullanın

http://php.net/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";
    }
}
?> 

The above example will output:

Dize AB10BC99 tüm onaltılık basamaktan oluşur.

Dize AR1012 tüm onaltılık rakamlardan oluşmuyor.

Dize ab12bc99 tüm onaltılık basamaktan oluşur.

"[0-9A-Fa-f] +" gibi basit bir RE karşı maç için herhangi bir neden var mı? (Edit: muhtemelen bir '^' sonunda başından ve '$' at bütün dize eşleşen ettik sağlamak için birlikte).

Sizin girişi çok büyük. dexhex in PHP manuel

The largest number that can be converted is 4294967295 in decimal resulting to "ffffffff"

Yani zaten başkaları tarafından burada sağlanmış olan bir RegEx, kullanarak daha iyi olacak.

Belki bu açıklama size yardımcı olacaktır:

http://php.net/manual/en/function.http-chunked-decode.php

Onun is_Hex fonksiyonu sağlar.

(Hatta PHP) bunu yapmak için birden fazla yolu her zaman vardır çünkü, böyle bir şey deneyebilirsiniz:

if ( 0 == strcspn($iv,'0123456789abcdef') ) {
    // TRUE
}
else {
    // FALSE
}

Eğrileri learninging açısından, önemli ölçüde daha hızlı preg_match anlamak için olmasına rağmen, kabaca eşit, fakat preg_match('{[^0-9a-f]}, $iv), daha hızlı olmalı ...

Bu da mümkündür ve oldukça basit

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

HEX dize kontrol etmek için mükemmel bir yol yukarıdaki PHP 4 ve çalışır.

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