web-dev-qa-db-fra.com

Comment vérifier les voyelles en JavaScript?

Je suis censé écrire une fonction qui prend un caractère (c'est-à-dire une chaîne de longueur 1) et renvoie true si c'est une voyelle, false sinon. Je suis venu avec deux fonctions, mais je ne sais pas laquelle est la plus performante et quelle voie je devrais préférer. Celui avec RegEx est beaucoup plus simple mais je ne sais pas si je devrais essayer d'éviter d'utiliser RegEx ou non.

Ma tentative sans RegEx:

function isVowel(char)
{
  if (char.length == 1)
  {
    var vowels = new Array('a','e','i','o','u');
    var isVowel = false;

    for(e in vowels)
    {
      if(vowels[e] == char)
      {
        isVowel = true;
      }
    }

    return isVowel;
  }
}

Avec RegEx:

function isVowelRegEx(char)
{
  if (char.length == 1)
  {
    return /[aeiou]/.test(char);
  }
}
18
Max

référence

Je pense que vous pouvez en toute sécurité dire qu'une boucle est plus rapide.

J'admets qu'une expression rationnelle semble plus propre en termes de code. Si c'est un véritable goulot d'étranglement, utilisez une boucle for, sinon restez avec l'expression habituelle pour des raisons "d'élégance"

Si vous voulez aller pour la simplicité alors utilisez simplement

function isVowel(c) {
    return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1
}
39
Raynos

Perdu de réponses ici, la vitesse n’est pas pertinente pour de telles petites fonctions, à moins que vous ne les appeliez quelques centaines de milliers de fois sur une courte période. Pour moi, une expression régulière est préférable, mais gardez-la dans une fermeture pour ne pas la construire à chaque fois:

Version simple:

function vowelTest(s) {
  return (/^[aeiou]$/i).test(s);
}

Version plus efficace:

var vowelTest = (function() {
  var re = /^[aeiou]$/i;
  return function(s) {
    return re.test(s);
  }
})();

Retourne true si s est une voyelle unique (majuscule ou minuscule) et false pour tout le reste.

15
RobG

cycles, tableaux, regexp ... pour quoi? Cela peut être beaucoup plus rapide :)

function isVowel(char)
{
    return char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u' || false;
}
7
Emmerman

C’est une fonction RegExp approximative que j’aurais trouvée

function isVowel(char) {
    return /^[aeiou]$/.test(char.toLowerCase());
}

Ce qui signifie, if (char.length == 1 && 'aeiou' is contained in char.toLowerCase()) then return true.

3
Buhake Sindi

Personnellement, je le définirais ainsi:

function isVowel( chr ){ return 'aeiou'.indexOf( chr[0].toLowerCase() ) !== -1 }

Vous pouvez également utiliser ['a','e','i','o','u'] et ignorer le test de longueur, mais vous créez alors un tableau chaque fois que vous appelez la fonction. (Il y a moyen de reproduire cela via des fermetures, mais celles-ci sont un peu obscures à lire)

3
cwallenpoole
function isVowel(char)
{
  if (char.length == 1)
  {
    var vowels = "aeiou";
    var isVowel = vowels.indexOf(char) >= 0 ? true : false;

    return isVowel;
  }
}

Fondamentalement, il vérifie l'index du caractère dans la chaîne de voyelles. Si c'est une consonne et non dans la chaîne, indexOf retournera -1.

1
Håvard
function findVowels(str) {
  return (str.match(/[aeiou]/ig)||[]);
}

findVowels('abracadabra'); // 'aaaaa'

Fondamentalement, il renvoie toutes les voyelles dans une chaîne donnée.

0
José Salgado