Question

J'ai cette application quiz où je correspondent à ce que les gens taper la bonne réponse. Pour l'instant, ce que je fais est essentiellement que:

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

Il est agréable, comme si la réponse est « poisson », l'utilisateur peut taper « un poisson » et être compté une bonne réponse.

Le problème que je suis face est que, eh bien, mes utilisateurs comme moi sommes français, et je voudrais être en mesure d'accepter, par exemple, un typage utilisateur « taton », et la réponse étant « taton ».

Alors, ce que je pouvais faire, est:

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

Et dans ma routine de contrôle, faire:

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

et quelque chose de même avec la réponse.

Je ne l'aime pas, parce que je dois les choses de code dur, et le jour où je décide que je pars le monde ISO-8859-15 pour le monde UTF-8, je suis vouée à l'échec.

Alors, je suis à la recherche d'un moyen de comparer les chaînes, qui font "tâton" eq "taton", "maçon" eq "macon" ou "macon" =~ /maçon/ vrai.

Était-ce utile?

Autres conseils

Cela ne semble pas être une occasion appropriée pour invoquer des expressions régulières - vous devez simplement avoir une liste de réponses acceptables, plus un certain filtrage pour supprimer des mots non essentiels comme « un », « les », et leurs équivalents spécifiques à une langue.

Quoi que vous fassiez, il me semble évident qu'il doit être de codage de caractères conscients et sensibles au langage. Les expressions régulières sont généralement non plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top