PHP: Как я могу проверить, что образец двоичной строки был только 1 и 0? - PullRequest
2 голосов
/ 30 января 2010

Я хотел проверить, было ли число в PHP правильным двоичным.До сих пор я добавил это, чтобы проверить, является ли оно делимым на 8:

if(strlen($binary) % 8 == 0){
        return true;
} else {
        return false;
}

. Это работает, но, очевидно, позволяет размещать другие числа, например 22229999.метод я могу использовать, чтобы убедиться, что только 1 и 0 в строке?например, 10001001. Не знаю, как это сделать.

Ответы [ 4 ]

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

Это может быть быстрее, чем запустить двигатель регулярного выражения:

if (strspn ( $subject , '01') == strlen($subject)) {
    echo 'It\'s binary!';
} else {
    echo 'Not binary!';
}

Если вы просто ищете простые символы или хотите их посчитать, регулярное выражение часто довольно медленное, в то время как одна или две встроенные строковые функции могут выполнять работу намного быстрее. Может быть, это применимо здесь, а может и нет.

Услышав некоторые комментарии в комментариях, что это может не сработать, вот контрольный пример:

<?php

$strings = array('10001001', '22229999', '40004000');

foreach ( $strings as $string )
{
    if ( strspn( $string, '01') == strlen( $string ) ) {
        echo $string . ' is binary!' . "\n";
    } else {
        echo $string . ' is NOT binary!' . "\n";
    }
}

Это делает работу.

2 голосов
/ 30 января 2010
for variety

if (!preg_match('/[^01]/', $str))
{
    echo 'is binary';
}
2 голосов
/ 30 января 2010
if (preg_match('~^[01]+$~', $str))
{
    echo 'is binary';
}

Вдохновлен ответом Techpriester ( исправлена ​​ошибка ):

if (in_array(count_chars($str, 3), array('0', '1', '01'))
{
    echo 'is binary';
}
1 голос
/ 30 января 2010
if ( preg_match('#^[01]+$#', $string) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...