检查整个字符串是否包含相同的字符

6
我想检查一个字符串是否包含重复零次或多次的字符,例如:
  • 如果我的字符串是aaaaaabbbbc*****,它必须返回true

  • 如果它包含aaabcd**%***,它必须返回false

换句话说,如果字符串有2个或更多的唯一字符,它必须返回false
如何在PHP中实现?
PS:有没有不使用正则表达式的方法?
7个回答

9

您可以对每个字符进行分割,然后计数数组的唯一值。

if(count(array_count_values(str_split('abaaaa'))) == 1) {
    echo 'True';
} else {
    echo 'false';
}

演示: https://eval.in/760293

1
不错的答案,但如果改为以下形式会更加优雅:return count(array_count_values(str_split('abaaaa'))) == 1; - Silvio Delgado

5
count(array_unique(explode('', string)) == 1) ? true : false;

这会产生一个警告:explode(): Empty delimeter。使用str_split代替。 - brian_d

4
您可以使用带有反向引用的正则表达式:
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;
    }
}

1
你可以检查唯一字符的数量是否大于1。即使输入字符串为空,这也会表现得很好: (演示)
$string = 'aaaba';
var_export(
    strlen(count_chars($string, 3)) < 2   // false
);

或者,您可以通过其第一个字符来修剪字符串,但如果输入字符串没有长度,则会生成警告/通知。(演示)

$string = 'aaaba';
var_export(
    !strlen(trim($string, $string[0]))   // false
);

p.s. 是的,你可以使用 !strlen(trim($string, @$string[0])) 来避免零长度字符串引起的警告/提示,但我像瘟疫一样避免错误抑制,因为它通常会让代码变得不好。


1
strlen(str_replace($string[0], '', $string)) ? false : true;

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将溢出,模运算将无法产生正确的值。所以,不要使用这个:) - 发布它只是为了展示一个与通常想法不同的想法。

对于那些不熟悉unpack()hexdec()的可怜人,你能否编辑你的问题来解释这种技术是如何工作的(在什么情况下有效)? - mickmackusa

0

正则表达式:^(.)\1{1,}

^:字符串的开头

(.):匹配并捕获单个字符。

\1{1,}:使用捕获的字符一次或多次。

您可以使用正则表达式进行此操作

或者:

PHP代码演示

$string="bbbb";
if($length=strlen($string))
{
    substr_count($string,$string[0]);
    if($length==substr_count($string,$string[0]))
    {
        echo "Do something";
    }
}

{1,} is the same as + - Barmar
@Barmar 谢谢,我知道,但大多数时候我使用这个而不是 + - Sahil Gulati
1
@IbrahimAzharArmar,我更新了我的帖子,请查看。 - Sahil Gulati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接