需要计算字符串php中的德语字符数

需要计算字符串php中的德语字符数,php,Php,我需要用php计算字符串中的所有德语字符 我试着这样做: $pattern = '/[äüöÄÜÖß]/'; $address = "Knnöstraße"; $counting = 0; if(preg_match($pattern, $address )) { $counting ++; } echo $counting; 但它只返回我1。计算特殊字符的最佳方法是什么 使用preg_all_match函数,它返回4,但必须是2: preg_match_all($patter

我需要用php计算字符串中的所有德语字符

我试着这样做:

$pattern = '/[äüöÄÜÖß]/';

$address = "Knnöstraße";

$counting = 0;

if(preg_match($pattern, $address )) {
    $counting ++;
}

echo $counting;
但它只返回我1。计算特殊字符的最佳方法是什么


使用preg_all_match函数,它返回4,但必须是2:

preg_match_all($pattern, $address, $matches, PREG_SET_ORDER);

echo count($matches); 

您可以计算原始字符串和没有特殊德语字符的字符串之间的差异,如下所示:

echo (mb_strlen($address, 'UTF-8') - strlen(str_replace(['ä', 'ü', 'ö', 'Ä', 'Ü', 'Ö', 'ß'], '', $address))); //2

您可以计算原始字符串和没有特殊德语字符的字符串之间的差异,如下所示:

echo (mb_strlen($address, 'UTF-8') - strlen(str_replace(['ä', 'ü', 'ö', 'Ä', 'Ü', 'Ö', 'ß'], '', $address))); //2
preg_match()如果模式与给定主题匹配,则返回1;如果不匹配,则返回0;如果发生错误,则返回FALSE

在您的示例中,您只需检查我们是否至少有一个字符

我建议使用以下代码来解决您的问题:

    $pattern = '/[äüöÄÜÖß]/u';
    $address = "Knnöstraße";
    $counting = preg_match($pattern, $address );
    if($counting === false) {
       throw new \Exception('Regexp error');
    }

    echo $counting;
顺便说一句,您应该使用“u”修饰符将preg-match切换到Unicode模式。您错过了这个标志,这就是为什么得到4而不是2的原因。如果模式与给定主题匹配,preg_match()将返回1,如果不匹配,则返回0,如果发生错误,则返回FALSE

在您的示例中,您只需检查我们是否至少有一个字符

我建议使用以下代码来解决您的问题:

    $pattern = '/[äüöÄÜÖß]/u';
    $address = "Knnöstraße";
    $counting = preg_match($pattern, $address );
    if($counting === false) {
       throw new \Exception('Regexp error');
    }

    echo $counting;

顺便说一句,您应该使用“u”修饰符将preg-match切换到Unicode模式。你错过了这个标志,这就是为什么你得到的是4而不是2。你需要使用/u修饰符,这样图案和主题将被视为UTF-8。这将给出正确的结果:

$pattern = '/[äüöÄÜÖß]/u';
$address = "Knnöstraße"; 
preg_match_all($pattern, $address, $matches, PREG_SET_ORDER); 
echo sizeof($matches);

它输出2,正如预期的那样。

您需要使用/u修饰符,这样图案和主题将被视为UTF-8。这将给出正确的结果:

$pattern = '/[äüöÄÜÖß]/u';
$address = "Knnöstraße"; 
preg_match_all($pattern, $address, $matches, PREG_SET_ORDER); 
echo sizeof($matches);

它输出2,正如预期的那样。

它返回我4,但它必须是2…它返回我4,但它必须是2…
mb\u strlen(str\u replace(
)!如果字符串中有其他UTF8内容呢?如果字符串中包含来自不同“字母表”的unicode字符,则需要使用mb\u strlen()如果字符串中有其他UTF8内容呢?如果字符串中有来自不同“字母表”的unicode字符,则需要在两个字符串上都使用mb_strlen()。否则就不需要了,而且速度差异很大。