Проверьте двоичную строку, здесь встречаются ошибки - PullRequest
1 голос
/ 30 января 2010

Я использую эту функцию, чтобы проверить, является ли двоичный файл правильным, я знаю, что он выглядит неаккуратно ... Я не уверен, как хорошо написать функцию ... но, похоже, она не работает!

Если бинарный = 10001000, он говорит, что неправильно сформирован, хотя это не так .. что не так в моей функции? ..

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";
}

Почему эта функция всегда говорит, что 10001000 неверно?

Ответы [ 3 ]

4 голосов
/ 30 января 2010

if(!strlen($binary) % 8 == 0){ должно быть

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

edit and btw: Поскольку вы уже используете preg_match (), вы можете упростить / сократить функцию до

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

Это позволяет 0 - 12 групп по 8 символов 0/1, что включает в себя все тесты, которые вы в настоящее время выполняете в своей функции:

  • strlen ()% 8 покрывается {8} во внутренней группе
  • strlen ()> 100 покрывается {0,12}, так как любая строка длиной более 8 * 12 = 96 символов вызовет либо первый if, либо тест> 100
  • 0/1 тест очевиден
  • is_numeric является своего рода излишним

edit2: имя checkbinary не может быть идеальным выбором для этой функции. Не обязательно ожидать, что он проверит выравнивание 8 бит / байт и strlen () <= 100. </p>

0 голосов
/ 30 января 2010

Я не совсем уверен, чего вы пытаетесь достичь, но вы могли бы быть в состоянии добраться через следующее ...

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

По сути, это сравнение результатов преобразования из двоичного в двоичное - следовательно, если результирующий вывод идентичен, ввод должен быть допустимой двоичной строкой.

0 голосов
/ 30 января 2010
function checkbinary($bin) {
    return preg_match('#^[01]+$#', $bin);
}

Некоторые тесты: http://www.ideone.com/3D9SQetX и http://www.ideone.com/1HCCtxVV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...