我想检查一个字符串是否包含相同的字符,例如,如果我的字符串是'aaaaaa'
或'bbbb'
或'*****'
,它必须返回true
或者如果它包含'aaab'
或'**%***'
它必须返回false
,如何在PHP中进行此操作?
PS:有没有办法在没有RegEx的情况下做到这一点?
答案 0 :(得分:6)
您可以在每个字符上split,然后count数组中的唯一值。
<?php
if(count(array_count_values(str_split('abaaaa'))) == 1) {
echo 'True';
} else {
echo 'false';
}
答案 1 :(得分:5)
count(array_unique(explode('', string)) == 1) ? true : false;
答案 2 :(得分:3)
您可以使用带有反向引用的正则表达式:
if (preg_match('/^(.)\1*$/', $string) {
echo "Same characters";
}
或简单循环:
$same = true;
$firstchar = $string[0];
for ($i = 1; $i < strlen($string); $i++) {
if ($string[$i] != $firstchar) {
$same = false;
break;
}
}
答案 3 :(得分:1)
希望这会奏效。
正则表达式:^(.)\1{1,}
^
:字符串
(.)
:匹配并捕获单个被追踪者。
\1{1,}
:使用捕获的角色一次或多次。
或强>
$string="bbbb";
if($length=strlen($string))
{
substr_count($string,$string[0]);
if($length==substr_count($string,$string[0]))
{
echo "Do something";
}
}
答案 4 :(得分:1)
strlen(str_replace($string[0], '', $string)) ? false : true;
答案 5 :(得分:1)
为了它的乐趣:
<?php
function str2Dec($string) {
$hexstr = unpack('H*', $string);
$hex = array_shift($hexstr);
return hexdec($hex);
}
function isBoring($string) {
return str2Dec($string) % str2Dec(substr($string, 0, 1)) === 0;
}
$string1 = 'tttttt';
$string2 = 'ttattt';
var_dump(isBoring($string1)); // => true
var_dump(isBoring($string2)); // => false
显然这仅适用于小字符串,因为一旦它变得足够大,INT就会溢出,而mod将不会产生正确的值。所以,不要使用这个:) - 发布它只是为了显示与通常的不同的想法。
答案 6 :(得分:1)
令我惊讶的是,所有其他答案都在努力工作。有些人正在将字符串转换为数组,使用正则表达式,循环和编写自定义函数来替换字符。
这就是所有需要做的事情,两个字符串函数:
$string='aaaba';
var_export(strlen(count_chars($string,3))>1?false:true);
// false
这两个函数(count_chars()
和strlen()
)就是为此而设计的。