PHP:我如何检查样本二进制字符串是否只有1和0?

时间:2010-01-30 10:49:13

标签: php binary

我想检查PHP中的数字是否是正确的二进制文件。到目前为止,我已添加此内容以检查是否可以通过8:

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

它有效,但它显然允许放入其他数字,例如22229999。

我可以使用什么方法来确保字符串中只有1和0?例如10001001.不知道该怎么做。

4 个答案:

答案 0 :(得分:5)

这可能比启动正则表达式引擎更快:

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

它完成了这项工作。

答案 1 :(得分:2)

if (preg_match('~^[01]+$~', $str))
{
    echo 'is binary';
}

受Techpriester的回答启发(修复错误):

if (in_array(count_chars($str, 3), array('0', '1', '01'))
{
    echo 'is binary';
}

答案 2 :(得分:2)

for variety

if (!preg_match('/[^01]/', $str))
{
    echo 'is binary';
}

答案 3 :(得分:1)

if ( preg_match('#^[01]+$#', $string) )