Pergunta

Eu tenho esta aplicação quiz onde eu corresponder ao que as pessoas digitam com a resposta certa. Por agora, o que eu faço é basicamente isso:

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

É bom, como se a resposta é "peixe" o usuário pode digitar um "peixe" e ser contado uma boa resposta.

O problema que estou enfrentando é que, bem, meus usuários como eu são francês, e eu gostaria de ser capaz de aceitar, por exemplo, um usuário digitando "Taton", ea resposta ser "Taton".

Então, o que eu poderia fazer, é:

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

E na minha rotina de verificação, faça um:

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

e algo da mesma forma com a resposta.

Eu não gosto disso, porque eu tenho que coisas código rígido, e no dia que eu decidir que eu estou deixando o mundo da ISO-8859-15 para o mundo do UTF-8, eu estou condenado.

Então, eu estou procurando uma maneira de comparar strings, que vai fazer "tâton" eq "taton", "maçon" eq "macon" ou "macon" =~ /maçon/ ser verdade.

Foi útil?

Outras dicas

Esta não parece ser uma ocasião adequada para invocar expressões regulares - você deve simplesmente ter uma lista de respostas aceitáveis, além de alguns filtragem para remover palavras não essenciais como "A", "a", e seus equivalentes específicos do idioma.

Faça o que fizer, parece-me óbvio que ele deve ser-codificação de caracteres-consciente e com reconhecimento de linguagem. As expressões regulares são tipicamente não.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top