【问题标题】:Count Uppercase and Lowercase Letters without using RegEx in php [closed]在php中不使用RegEx计算大写和小写字母[关闭]
【发布时间】:2017-07-31 13:24:37
【问题描述】:

如何在不使用的情况下使用正则表达式计算字符串中的大写和小写字母和数字?

【问题讨论】:

  • 你对 Regex 有什么看法?! ^.^
  • 为所有大写字母创建一个数组,使用in_array检查字符串的每个字符。
  • 大多数人不会,他们只会使用正则表达式;但很容易做到:array_count_values() 很有帮助
  • 这是作业吗?
  • ya.. 这是一个任务

标签: php string string-matching


【解决方案1】:
$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

【讨论】:

  • 嘿!一样的想法! ^.^
  • 重音必须被捕捉,所以使用“多字节字符串函数”作为mb_strtolowermb_strtoupper。小心similar_text 有一些奇怪的结果。例如,我尝试使用Yolo yolO yolO yolo Yolo 并预期4 大写字母,但您的回答给了我7sandbox.onlinephpfunctions.com/code/…
【解决方案2】:

这是利用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

【讨论】:

    【解决方案3】:

    试试这些功能:

    <?
        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;
        }
    ?>
    

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

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

    【讨论】:

    • @ADIUnitechRoR 您已将绿色勾号授予未尝试提供解释的答案。我敦促您考虑这个答案(大约在同一时间发布)更值得绿色勾号。当两个答案大致同时发布并且使用相同的方法时,决胜局应该是解释的质量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2019-08-08
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多