Mam tę aplikację do quizu, w której pasuję do tego, co ludzie wpisują z właściwą odpowiedzią. Na razie, co mogę zrobić, to w zasadzie, że:Jak mogę zignorować akcenty podczas porównywania ciągów w Perlu?
if ($input =~ /$answer/i) {
print "you won";
}
Miło, jakby odpowiedź brzmi „ryba” użytkownik może wpisać „rybę” i liczy się dobrą odpowiedź.
Problem, z którym się borykam, polega na tym, że, cóż, moi użytkownicy, ponieważ jestem Francuzem, i chciałbym móc zaakceptować, powiedzmy, użytkownika piszącego "taton", a odpowiedź brzmi "tâton".
Więc, co mogę zrobić, to:
use POSIX qw(locale_h);
use locale;
setlocale(LC_TYPE, "fr_FR.ISO8859-15");
setlocale(LC_COLLATE, "fr_FR.ISO8859-15");
I w moim rutynowej kontroli, zrobić:
$input = lc($input);
$input =~ tr/àáâãäåçèéêëìíîïñòóôõöùúûüýÿ/aaaaaaceeeeiiiinooooouuuuyy/;
i coś podobnie z odpowiedzią.
Nie podoba mi się to, ponieważ muszę mocno kodować rzeczy, a kiedy zdecyduję, że opuszczam świat ISO-8859-15 dla świata UTF-8, jestem skazany na zagładę.
Poszukuję więc sposobu na porównanie ciągów, które sprawią, że "tâton" eq "taton"
, "maçon" eq "macon"
lub "macon" =~ /maçon/
będzie prawdziwe.
Wadą jest to, że użytkownik może wpisać: "samolubne krasnale", a oni nadal będą poprawni. –
To był tylko przykład, i, no cóż, mogliby również wpisać cały słownik za każdym razem :-) – mat
Prawdopodobnie chcesz tam jakieś granice słów: m/\ b $ answer \ b/ –