【发布时间】:2010-09-28 00:55:49
【问题描述】:
我有这个测验应用程序,我将人们输入的内容与正确答案相匹配。目前,我所做的基本上是:
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/ 为真。
【问题讨论】:
-
缺点是用户可以输入:“selfish gnomes”,但它们仍然是正确的。
-
这只是一个例子,而且,他们也可以每次都输入整个字典:-)
-
你可能想要一些单词边界:m/\b$answer\b/
标签: perl string comparison diacritics