3 votes

Javascript - Ignorer la ponctuation et les espaces dans une déclaration Switch

J'ai une page avec une question. L'utilisateur devra taper la réponse à cette question dans une zone de texte. J'utilise une instruction switch pour générer un retour différent en fonction de la réponse. J'ai déjà réussi à rendre le système insensible à la casse.

Existe-t-il un moyen de faire en sorte qu'il ignore également la ponctuation et les espaces ?

Voici le code que j'ai :

function myFunction() {
    var text;
    var answers = document.getElementById("myInput").value.toLowerCase();
    switch (answers) {
        case "superman":
            text = "That is correct!";
            break;
        case "batman":
            text = "You must be kidding me...";
            break;
        default:
            text = "Wrong answer."
    }
    document.getElementById("comment").innerHTML = text;
}

<p>Who is Clark Kent?</p>
<input id="myInput" type="text">
<button onclick="myFunction()">Answer</button>
<p id="comment"></p>

Je voudrais qu'il accepte toutes les réponses suivantes comme correctes, sans avoir à ajouter des cas supplémentaires :

"Superman", "Superman", "Super Man", "Super man", "Super-Man !", "Super-man"...

4voto

Saransh Kataria Points 1030

Vous pourriez utiliser une expression rationnelle pour ignorer tout ce qui n'est pas un alphabet.

function myFunction() {
    var text;
    var answers = document.getElementById("myInput").value.toLowerCase();
    answers = answers.replace(/[^a-z]/g, "");
    switch (answers) {
        case "superman":
            text = "That is correct!";
            break;
        case "batman":
            text = "You must be kidding me...";
            break;
        default:
            text = "Wrong answer."
    }
    document.getElementById("comment").innerHTML = text;
}

3voto

Nina Scholz Points 17120

Vous pouvez ne faire correspondre que des lettres et omettre les caractères non désirés. Puis convertir en minuscules.

function myFunction() {
    function getLetters(s) { return s.match(/[a-z]/gi).join('').toLowerCase(); }

    var text;
    var answers = document.getElementById("myInput").value.toLowerCase();
    switch (getLetters(answers)) {
        case "superman":
            text = "That is correct!";
            break;
        case "batman":
            text = "You must be kidding me...";
            break;
        default:
            text = "Wrong answer."
    }
    document.getElementById("comment").innerHTML = text;
}

<p>Who is Clark Kent?</p>
<input id="myInput" type="text">
<button onclick="myFunction()">Answer</button>
<p id="comment"></p>

2voto

Aagam Jain Points 1404

Utilisez ça :

var desired = stringToReplace.replace(/[^\w\s]/gi, '').toLowerCase();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X