2010-04-15 18 views
24

Bu dizginin nasıl doğrulanacağı konusunda hiçbir fikrim yok. Sadece bir şifreleme için bir IV sağlamaktayım, ancak 1is_hex() 1 veya benzeri bir işlev bulamıyor, kafamı sarabilirim! (. Kullanıcı contrib notları) Ben php belgelerinde bir yorumum bu okuyun:PHP: Basit, Dizin altı ise doğrulayın.

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

Ama bu hiç işe görünmüyor .. Sadece yanlış diyor. benim IV benim girdi bu olurdu yardımcı olursa:

92bff433cc639a6d 

cevap

49

kullanımı fonksiyonu: çıktısı 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"; 
    } 
} 
?> 

Yukarıdaki örnekte:

  • AB10BC99 tüm onaltılı basamak oluşur dize.
  • AR1012 dizesi tüm onaltılık basamaklardan oluşmaz.
  • ab12bc99 dizesi tüm onaltılık basamaklardan oluşur.
+1

Teşekkür ederiz!Bazen regex kullanmayı sevmiyorum, orada barebon olduğuna sevindim. Bir dahaki sefere fonksiyon listesinde daha fazla görünmeli. –

3

gibi basit RE karşı "[0-9A-Fa-f] +" eşleşecek şekilde herhangi bir neden var mı? (Düzenleme: muhtemelen başlangıçta '^' ile ve tüm dizeyle eşleştiğinden emin olmak için '$' ile).

+0

Denedim, $ iv = "92bff433cc63da6W" if (preg_match ('/ [0-9A-Fa-f] + /', $ iv)) { $ enc = mcrypt_encrypt (MCRYPT_BLOWFISH, $ anahtar, $ veri, MCRYPT_MODE_CBC, paketi ("H *" $ iv)); $ ENCRSLT = bin2hex ($ enc); Diğer { $ ENCRSLT = "Hata: Anahtar veya IV, Hexidecimal değil. } Ancak, doğrulanmadı (sonundaki bariz W) –

+0

Hata! lol –

+0

Regexp için git: "^ [0-9a-f] $" Jerry tarafından önerildiği gibi. Ve yapıştırdığınız hata mesajına göre desteklenmediği için büyük harf A-F'yi bırakın. –

1

Girişiniz çok büyük. dexhex

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

PHP kılavuzunda itibaren Yani zaten başkaları tarafından burada sağlanan edilmiş bir RegEx kullanarak daha iyi olacak.

+0

Hex, bir sayı yerine IV için 8 baytlık bir dizeydi, regex ve daha iyi bir ctype_xdigit işi yaptı. –

0

Bu da mümkündür ve

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

Ve oldukça pahalı. – caiosm1005

+0

Artık PHP 7'de izin verilmiyor, bkz. "Onaltılı dizeler artık sayısal sayılmıyor" http://php.net/manual/en/migration70.incompatible.php –

1

HEX dizesini kontrol için mükemmel bir yoldur yukarıdaki PHP 4 ve çalışır oldukça basit.

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

bir başka yolu ctype veya regex olmadan davayı duyarsız 'i' bayrak

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

ekleyin:

$str = 'string to check'; 

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