2008-12-22 51 views
9

我有這個測驗應用程序,我匹配什麼人與正確的答案類型。現在,我要做的就是基本上是:如何在Perl中比較字符串時忽略重音符號?

if ($input =~ /$answer/i) { 
    print "you won"; 
} 

這是很好的,因爲如果答案是「魚」,用戶可以輸入「魚」和算作一個很好的答案。

我面臨的問題是,我的用戶是法國人,而且我希望能夠接受用戶輸入「taton」,答案是「tâton」。

所以,我能做什麼,就是:

use POSIX qw(locale_h); 
use locale; 
setlocale(LC_TYPE, "fr_FR.ISO8859-15"); 
setlocale(LC_COLLATE, "fr_FR.ISO8859-15"); 

而在我的例行檢查,做了:

$input = lc($input); 
$input =~ tr/àáâãäåçèéêëìíîïñòóôõöùúûüýÿ/aaaaaaceeeeiiiinooooouuuuyy/; 

,並回答同樣的東西。

我不喜歡它,因爲我有硬編碼的東西,我決定有一天我要離開了ISO-8859-15世界爲UTF-8的世界裏,我是註定要失敗的。

所以,我正在尋找一種方法來比較字符串,這將使"tâton" eq "taton","maçon" eq "macon""macon" =~ /maçon/爲真。

+0

缺點是用戶可以鍵入:「自私的侏儒」,他們仍然是正確的。 – 2008-12-22 16:28:37

回答

0

這似乎並不像調用正則表達式一個適當的場合 - 你應該簡單地具有可接受答案的列表,加上一些過濾去除,如「一」,「中」,和他們的特定語言的等效不必要的詞。

無論你做什麼,對我來說它似乎都很明顯,它必須是字符編碼感知和語言感知。正則表達式通常都不是。