Frage

Ich habe diese Quiz-Anwendung, wo ich passen, was die Leute mit der richtigen Antwort geben. Denn jetzt, was ich tue ist im Grunde, dass:

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

Es ist schön, als ob die Antwort „Fisch“ kann der Benutzer „einen Fisch“ geben und eine gute Antwort gezählt werden.

Das Problem ist, ich bin vor, dass, na ja, meine Nutzer wie ich französisch, und ich möchte in der Lage sein, sagen wir zu akzeptieren, einen Benutzer die Eingabe von „Taton“, und die Antwort ist „Tatoń“.

Also, was ich tun könnte, ist:

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

Und in meinem Prüfroutine, tun ein:

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

und etwas ebenfalls mit der Antwort.

Ich mag es nicht, weil ich zu hart Code Dinge habe, und der Tag beschließe ich, ich bin die ISO-8859-15 Welt für die UTF-8-Welt zu verlassen, ich bin zum Scheitern verurteilt.

Also, ich bin auf der Suche nach einer Möglichkeit, Strings zu vergleichen, die "tâton" eq "taton", "maçon" eq "macon" oder "macon" =~ /maçon/ wahr machen wird.

War es hilfreich?

Lösung

Versuchen Sie, die Text :: Unaccent CPAN-Modul (oder Text :: Unaccent :: PurePerl ).

Andere Tipps

Dies scheint nicht wie eine richtige Gelegenheit reguläre Ausdrücke für den Aufruf - Sie einfach eine Liste akzeptabler Antworten haben sollten, sowie einige Filterung nicht-essentiellen Wörter wie „a“, „die“, und ihre sprachspezifischen Äquivalente zu entfernen.

Was immer Sie tun, so scheint es mir klar, dass es Zeichencodierungs-aware und sprach bewusst sein müssen. Reguläre Ausdrücke sind in der Regel auch nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top