152 votes

Meilleure façon de faire une vérification alphanumérique en JavaScript

Quelle est la meilleure façon d'effectuer une vérification alphanumérique sur un fichier INPUT dans le champ JSP ? J'ai joint mon code actuel

function validateCode() {
    var TCode = document.getElementById("TCode").value;

    for (var i = 0; i < TCode.length; i++) {
        var char1 = TCode.charAt(i);
        var cc = char1.charCodeAt(0);

        if ((cc > 47 && cc < 58) || (cc > 64 && cc < 91) || (cc > 96 && cc < 123)) {
        } else {
            alert("Input is not alphanumeric");
            return false;
        }
    }

    return true;
}

3 votes

Cela dépend de votre définition de "meilleur". La plupart des réponses ci-dessous suggèrent regex, qui exécute beaucoup plus lent que votre code original . J'ai nettoyé votre code un peu, qui se comporte en fait très bien.

129voto

Mahesh Velaga Points 9420

Vous pouvez utiliser cette regex /^[a-z0-9]+$/i

4 votes

Bien sûr, cela suppose que la chaîne vide ( "" ) ne doivent pas être appariés.

21 votes

ñ n'entre pas dans le modèle, mais un caractère UTF-8 entièrement valide.

13 votes

/^[a-z0-9]+$/i.test( TCode )

121voto

L'inclinaison initiale de l'auteur de la demande à utiliser str.charCodeAt(i) semble être plus rapide que l'alternative des expressions régulières. Dans mon test sur jsPerf l'option RegExp est 66 % plus lente dans Chrome 36 (et légèrement plus lente dans Firefox 31).

Voici une version nettoyée du code de validation original qui reçoit une chaîne de caractères et retourne true o false :

function isAlphaNumeric(str) {
  var code, i, len;

  for (i = 0, len = str.length; i < len; i++) {
    code = str.charCodeAt(i);
    if (!(code > 47 && code < 58) && // numeric (0-9)
        !(code > 64 && code < 91) && // upper alpha (A-Z)
        !(code > 96 && code < 123)) { // lower alpha (a-z)
      return false;
    }
  }
  return true;
};

Bien sûr, il peut y avoir d'autres considérations, comme la lisibilité. Une expression régulière d'une ligne est certainement plus jolie à regarder. Mais si vous êtes strictement préoccupé par la vitesse, vous pouvez envisager cette alternative.

23 votes

Les programmeurs aiment l'aspect du code, mais vous voyez sa beauté intérieure.

0 votes

Une approche alternative intéressante - cela ne m'a même pas traversé l'esprit. Je suis venu ici en pensant uniquement au regex !

0 votes

La réponse qui vous fait réfléchir et vous fait comprendre ce que signifie "programmer". J'utilise votre façon de penser, en ma réponse

64voto

Mischa Arefiev Points 1330

Vérifiez-le avec une regex.

Les regexen Javascript ne disposent pas de classes de caractères POSIX, vous devez donc écrire les plages de caractères manuellement :

if (!input_string.match(/^[0-9a-z]+$/))
  show_error_or_something()

Ici ^ signifie le début de la chaîne et $ signifie fin de la chaîne, et [0-9a-z]+ signifie un ou plusieurs des caractères suivants 0 a 9 OU de a a z .

Plus d'informations sur les regexen Javascript ici : https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

18 votes

+1 pour avoir expliqué les regex de base et avoir fait un lien vers un guide, plutôt que de donner à l'utilisateur une "chaîne magique".

4 votes

@inor vous pouvez simplement ajouter 'i' à la fin de la regex pour spécifier l'insensibilité à la casse, .i.e. /^[a-z0-9]+$/i et cela couvrira les lettres minuscules et majuscules

37voto

user113716 Points 143363

Vous n'avez pas besoin de le faire un par un. Faites juste un test pour ceux qui sont no alpha-numérique. S'il y en a un, la validation échoue.

function validateCode(){
    var TCode = document.getElementById('TCode').value;
    if( /[^a-zA-Z0-9]/.test( TCode ) ) {
       alert('Input is not alphanumeric');
       return false;
    }
    return true;     
 }

S'il y a au moins une correspondance d'un numérique non alpha, il y aura return false .

6voto

Neerajan Points 74
    // On keypress event call the following method
    function AlphaNumCheck(e) {
        var charCode = (e.which) ? e.which : e.keyCode;
        if (charCode == 8) return true;

        var keynum;
        var keychar;
        var charcheck = /[a-zA-Z0-9]/;
        if (window.event) // IE
        {
            keynum = e.keyCode;
        }
        else {
            if (e.which) // Netscape/Firefox/Opera
            {
                keynum = e.which;
            }
            else return true;
        }

        keychar = String.fromCharCode(keynum);
        return charcheck.test(keychar);
    }

Plus loin, cet article aide également à comprendre la validation alphanumérique de JavaScript.

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