2013-06-18 5 views
-2

Comment vérifier si tous les caractères d'une chaîne sont identiques ou, en d'autres termes, s'il y a au moins deux caractères différents dans une chaîne?Comment vérifier si tous les caractères d'une chaîne sont identiques?


C'est ma tentative de non-travail:

<?php 
$isSame = False; 
$word = '1111';//in any language 
$word_arr = array(); 
for ($i=0;$i<strlen($word);$i++) { 
    $word_arr[] = $word[$i]; 
    if($word_arr[$i] == $word[$i]) $isSame = True; 
} 
var_dump($isSame); 
?> 
+0

faire S'il vous plaît que votre code est sous une forme lisible – dotINSolution

+3

« identique d'un caractère de mot » ne fait pas beaucoup de sens en tant que question. S'il vous plaît essayez d'expliquer plus ce que vous essayez de faire. – deceze

+2

RTLM: http://php.net/explode http://php.net/array_count_values ​​ –

Répondre

6

Je pense que vous essayez de voir si un mot est juste une répétition d'un caractère (c'est-à-dire qu'il n'a qu'un caractère différent).

Vous pouvez utiliser un simple regex pour que:

$word = '11111'; 
if (preg_match('/^(.)\1*$/', $word)) { 
    echo "Warning: $word has only one different character"; 
} 

Explication de la regex:

^ => start of line (to be sure that the regex does not match 
     just an internal substring) 
(.) => get the first character of the string in backreference \1 
\1* => next characters should be a repetition of the first 
     character (the captured \1) 
$ => end of line (see start of line annotation) 

Donc, en bref, assurez-vous que la chaîne ne dispose que des répétitions de son premier caractère et pas d'autre caractère.

+0

Merci.Ceci était ce que J'ai voulu. – amature

+0

Cette regex ne supporte pas certaines langues comme le russe ou l'arabe! – amature

+0

@amature si la chaîne est codée en UTF8, utilisez le modificateur de modèle ['u'] (http://php.net/reference.pcre.pattern.modifiers) (' PCRE_UTF8') ([docs] (http: // php.net/reference.pcre.pattern.modifiers)). – salathe

2

Utilisez count_chars pour votre chaîne avec le deuxième paramètre de 1 ou 3. Si votre chaîne est constituée d'un caractère répétant, par exemple:

$word = '1111'; 

// first check with parameter = 1 
$res = count_chars($word, 1); 
var_dump($res); 
// $res will be one element array, you can check it by count/sizeof 

// second check with parameter = 3 
$res = count_chars($word, 3); 
var_dump($res); 
// $res will be string which consists of 1 character, you can check it by strlen 
0

apparaît comme vous voulez vérifier si tous les personnages sont les mêmes

<?php 
$isSame = True; 
$word = '1111'; 
$first=$word[0]; 
for ($i=1;$i<strlen($word);$i++) { 
    if($word[$i]!=$first) $isSame = False; 
} 
var_dump($isSame); 
?> 

PHPFiddle

Questions connexes