2010-01-30 6 views
2

J'ai voulu vérifier si un nombre dans PHP était binaire approprié. Jusqu'à présent, je l'ai ajouté à vérifier si elle est devisable par 8:PHP: Comment vérifier si un exemple de chaîne binaire était seulement 1 et 0?

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

Il fonctionne, mais il permet évidemment d'autres chiffres à placer dans, comme 22229999.

Quelle méthode puis-je utiliser pour s'assurer que seulement 1 et 0 sont dans la chaîne? comme 10001001. Je ne sais pas comment y arriver.

Répondre

5

Cela peut être plus rapide que le tir le moteur de regex:

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

Si vous cherchez juste pour Si les caractères sont simples ou si vous voulez les compter, regex est souvent assez lent alors qu'une ou deux fonctions de chaînes intégrées peuvent faire le travail beaucoup plus rapidement. Peut-être que cela s'applique ici, peut-être pas.

Après avoir entendu quelques remarques dans les commentaires, que cela pourrait ne pas fonctionner, voici un test:

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

Il fait le travail.

+0

@ Tech, je doute que ce soit un impact significatif sur les performances de toute façon, si __ beaucoup plus rapide n'est pas vraiment probable. J'imagine que strspn utilise un moteur de type regex pour faire son travail de toute façon. –

+0

@Techpriester: +1 de moi, vérifiez ma réponse pour une solution alternative. –

+0

Le gain de performance dépend bien sûr de la quantité de chaîne qui correspond. S'il court cela sur plusieurs milliers de cordes, cela peut avoir un impact. – selfawaresoup

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

Inspiré par la réponse de Techpriester (bug fixe):

if (in_array(count_chars($str, 3), array('0', '1', '01')) 
{ 
    echo 'is binary'; 
} 
1
if (preg_match('#^[01]+$#', $string)) 
+0

Regex mal formé. –

+0

Merci, fixe (15 caractères) –

2
for variety 

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