Domanda

Ho questa applicazione quiz in cui abbino quello che la gente tipo con la risposta giusta. Per ora, quello che faccio è fondamentalmente che:

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

E 'bello, come se la risposta è "pesce" l'utente può digitare "un pesce" e conteggiata una buona risposta.

Il problema che sto affrontando è che, beh, i miei utenti come io sono il francese, e mi piacerebbe essere in grado di accettare, per esempio, un utente che digita "Taton", e la risposta è "TATON".

Allora, che cosa avrei potuto fare, è:

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

E nella mia routine di controllo, fare una:

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

e qualcosa lo stesso con la risposta.

Non mi piace, perché devo cose codice rigido, e il giorno decido io sto lasciando il mondo ISO-8859-15 per il mondo UTF-8, io sono condannato.

Quindi, sto cercando un modo per confrontare le stringhe, che farà "tâton" eq "taton", "maçon" eq "macon" o "macon" =~ /maçon/ essere vero.

È stato utile?

Soluzione

Altri suggerimenti

Questo non sembrare una vera e propria occasione per invocare le espressioni regolari - si dovrebbe semplicemente avere una lista di risposte accettabili, oltre a qualche filtro per rimuovere le parole non essenziali come "A", "i", e loro equivalenti specifici della lingua.

Qualunque cosa tu faccia, mi sembra ovvio per me che deve essere di codifica dei caratteri-aware e il linguaggio-aware. Le espressioni regolari sono in genere nessuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top