需要在字符串php中计算德语字符

时间:2016-10-18 15:09:59

标签: 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($pattern, $address, $matches, PREG_SET_ORDER);

echo count($matches); 

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

按预期输出2。

答案 2 :(得分:0)

如果模式与给定主题匹配,则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;

BTW您应该使用“u”修饰符将preg匹配切换为Unicode模式。你错过了这个标志,这就是为什么你得到4而不是2