Burada hataları içine koşu, ikili dize edin

3 Cevap php

Ben ikili doğruysa, ben o kadar iyi işlevi yazmak nasıl emin değilim .. özensiz görünüyor bilmek kontrol etmek için bu işlevi kullanıyorum .. ama çalışmak için görünmüyor!

Diyor ikili = 10001000 ise, bozuk bu .. benim işlevi yanlış ne değildir olsa? ..

function checkbinary($bin) {
    $binary = $bin;
    if(!strlen($binary) % 8 == 0){
        return 1;
    }
    if (strlen($binary) > 100) { 
        return 1;
    } 
    if (!preg_match('#^[01]+$#', $binary)){ //Tried without !
        return 1;
    } 
    if (!is_numeric($binary)) {
        return 1;   
    }
}

if (checkbinary("10001000") != 1) {
  echo "Correct";
} else {
  echo "Binary incorrect";
}

Neden bu işlev her zaman 10001000 yanlıştır diyor?

3 Cevap

if(!strlen($binary) % 8 == 0){ olmalıdır

if( strlen($binary) % 8 !== 0 ){

düzenlemek söyliyim: zaten preg_match kullanıyorsanız bu yana () Eğer kolaylaştırabilirsiniz / için işlevini kısaltmak

function checkbinary($binary) {
  return 1===preg_match('#^(?:[01]{8}){0,12}$#', $binary);
}

: Eğer şu anda işlevi olan tüm testleri içermektedir 8 0/1 Karakter 12 grupları - Bu 0 verir

  • strlen ()% 8 iç grubunda {8} ile kaplıdır
  • herhangi bir dize artık 8 * 12 = 96 daha karakterler ya ilk if veya> 100 testi tetikleyebilir zira strlen ()> 100 {0,12} ile kaplıdır
  • 0/1 testi açıktır
  • is_numeric tür gereksiz

edit2: adı checkbinary fonksiyonu için mükemmel bir seçim olmayabilir. Ben mutlaka 8bit/byte uyum ve strlen () <= 100 kontrol etmek istemem.

function checkbinary($bin) {
    return preg_match('#^[01]+$#', $bin);
}

Some tests: http://www.ideone.com/3D9SQetX ve http://www.ideone.com/1HCCtxVV.

Sana ulaşmak için çalışıyorsanız ne tamamen emin değilim, ama might aşağıdaki yoluyla oraya mümkün ...

if($binaryString == base_convert($binaryString, 2, 2))...

Özünde, bu ikili ikili bir dönüşüm sonuçlarını karşılaştırarak - sonuç çıktı aynıdır dolayısıyla eğer, giriş geçerli bir ikili dize olmalıdır.