如何检查字符串中的所有字符是否相同,或者换句话说,字符串中是否至少有两个不同的字符?
这是我的非工作尝试:
<?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 :(得分:8)
我认为你试图看一个单词是否只是一个字符的重复(即它只有一个不同的字符)。
您可以使用简单的正则表达式:
$word = '11111';
if (preg_match('/^(.)\1*$/u', $word)) {
echo "Warning: $word has only one different character";
}
正则表达式的解释:
^ => 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)
因此,简而言之,请确保字符串只重复其第一个字符,而不是其他字符。
答案 1 :(得分:2)
使用count_chars
作为字符串,第二个参数为1或3。
如果您的字符串由一个重复字符组成,例如:
$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
答案 2 :(得分:0)
看起来好像要检查所有字符是否相同
<?php
$isSame = True;
$word = '1111';
$first=$word[0];
for ($i=1;$i<strlen($word);$i++) {
if($word[$i]!=$first) $isSame = False;
}
var_dump($isSame);
?>