如何使用正则表达式计算字符串不带的大写和小写字母和数字?
答案 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