2016-10-18 121 views
0

我需要用php計算所有德文字符的字符串。需要計算一個字符串中的德國字符php

我tryed這樣的:

$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); 
+1

http://php.net/manual/en/function.preg-match-all.php – AbraCadaver

+0

它返回我4,但它必須是2 ... –

回答

1

你需要使用/ u修飾符,這樣模式和主題將被視爲UTF-8。這給出了正確的結果:

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

其中輸出2,如預期。

1

你可以指望原始字符串和字符串之間的差異無特殊德語字符,如下所示:

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

'mb_strlen(str_replace('!What if other UTF8東西在字符串中嗎? – JustOnUnderMillions

+0

如果你的字符串中包含來自不同「字母」的Unicode字符,那麼你需要在兩者上使用mb_strlen(),否則不需要,速度差異很大。 –

0

preg_match()返回1,如果模式匹配給定的主體,則返回0,否則返回FALSE,如果發生錯誤則返回FALSE。

在你的例子中,你只是檢查我們是否至少有字符或不。

我建議使用下面的代碼來解決問題:

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

    echo $counting; 

BTW你應該用「U」修飾符預浸匹配切換到Unicode模式。你錯過了這個標誌,這就是爲什麼你得到4而不是2