在PHP中不使用RegEx计算大写和小写字母

时间:2017-07-31 13:24:38

标签: php string string-matching

如何使用正则表达式计算字符串不带的大写和小写字母和数字?

3 个答案:

答案 0 :(得分:3)

$string    = "HelLo wOrlD";
$lowerCase = strtolower($string);
$upperCase = strtoupper($string);

$lowerDiff = similar_text($string, $lowerCase);
$upperDiff = similar_text($string, $upperCase);

echo "Capital:" . (strlen($string) - $lowerDiff); // 4
echo "<br>";
echo "Lowercase:" . (strlen($string) - $upperDiff); // 6

答案 1 :(得分:1)

尝试以下功能:

<?
    function count_uppercase($mixed_case) {
        $lower_case = strtolower($mixed_case);
        $similar = similar_text($mixed_case, $lower_case);
        return strlen($mixed_case)-$similar;
    }

    function count_lowercase($mixed_case) {
        $upper_case = strtoupper($mixedcase);
        $similar = similar_text($mixed_case, $upper_case);
        return strlen($mixed_case)-$similar;
    }
?>

这些函数创建一个新变量的任何字符串,并将它们全部转换为大写或小写(取决于您使用的函数),然后比较字符串之间的相似性,并返回差异的数量。

作为一个额外的好处,这也适用于带有变音符号的字符串。

答案 2 :(得分:1)

以下是利用count_chars()array_filter()array_sum()的方法。有很多方法可以解决这个问题。

此方法将获取每个字母的字节值,对其进行过滤(ascii table),然后将值相加。

$string="HelLo wOrlD";
$chars=count_chars($string,1);
$uppers=array_sum(array_filter($chars,function($k){return in_array($k,range(65,90));},ARRAY_FILTER_USE_KEY));
var_export($uppers);
echo "\n";
$lowers=array_sum(array_filter($chars,function($k){return in_array($k,range(97,122));},ARRAY_FILTER_USE_KEY));
var_export($lowers);

输出:

4
6

这是另一个提供相同结果的:

$string="HelLo wOrlD";
$upper=$lower=0;
foreach(str_split($string) as $c){
    if(ctype_upper($c)){
        ++$upper;
    }elseif(ctype_lower($c)){
        ++$lower;
    }
}
echo "Uppers = $upper, Lowers = $lower";

这是另一个:

$string="HelLo wOrlD";
$array=str_split($string);
$uppers=sizeof(array_filter($array,'ctype_upper')); // 4
$lowers=sizeof(array_filter($array,'ctype_lower')); // 6
$string="HelLo wOrlD";
$array=str_split($string);
$uppers=sizeof(array_intersect($array,range('A','Z'))); // 4
$lowers=sizeof(array_intersect($array,range('a','z'))); // 6