2010-12-13 8 views
70

Pouvez-vous s'il vous plaît suggérer la meilleure façon possible d'effectuer une vérification alpha-numérique sur un champ INPUT dans JSP? Je joins mon code actuel et je sais que son nulle proche de la perfection :)La meilleure façon de vérifier alphanumérique Javascript

<script type="text/javascript"> 
    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;  
    } 

+1

Dépend de la façon dont vous définissez "meilleur". La plupart des réponses ci-dessous suggèrent regex, qui fonctionne [beaucoup plus lentement que votre code original] (http://jsperf.com/alphanumeric-charcode-vs-regexp). J'ai [nettoyé votre code] (http://stackoverflow.com/a/25352300/388639) un peu, qui fonctionne vraiment très bien. –

Répondre

65

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

+3

bien sûr cela suppose que la chaîne vide ('" "') ne devrait pas correspondre. – zzzzBov

+0

C'est cool :) Regex est doux – t0mcat

+0

C'est bon, mais qu'en est-il des caractères non ASCII? – Oybek

30

Vous n'êtes pas obligé de le faire un à la fois. Il suffit de faire un test pour tout ce qui est pas alphanumérique. Si l'un d'eux est trouvé, 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 un match d'un numérique non alpha, il sera return false.

26

Vérifiez-le avec une regex.

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

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

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

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

+11

+1 pour expliquer l'expression rationnelle de base et la lier à un guide, plutôt que de donner à l'utilisateur chaîne magique ". –

+4

vous devez ajouter AZ – inor

5
// 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); 
    } 

En outre, this article aide aussi à comprendre la validation alphanumérique JavaScript.

5

Je voudrais créer une méthode prototype de chaîne:

String.prototype.isAlphaNumeric = function() { 
    var regExp = /^[A-Za-z0-9]+$/; 
    return (this.match(regExp)); 
}; 

Ensuite, l'utilisation serait:

var TCode = document.getElementById('TCode').value; 
return TCode.isAlphaNumeric() 
+1

[JavaScript maintenable: ne pas modifier les objets que vous ne possédez pas] (http://www.nczonline.net/blog/2010/03/02/maintainable-javascript-dont-modify-objects -you-down-own /) – SeinopSys

+2

DJDavid98: Je ne pense pas que la règle "ne pas modifier les objets que vous ne possédez pas" s'applique ici. Justin étendait les capacités de String sans modifier les fonctionnalités existantes. Pour la perspective, dans le monde C#, cela serait considéré comme un usage parfaitement valide d'une méthode d'extension. Même si un jour "String.isAlphaNumeric(): boolean" serait implémenté par les fabricants de navigateurs, ni la signature ni l'action ne changeraient, donc je ne vois aucune réduction de maintenabilité dans cet exemple particulier. Ce quelque chose est une règle n'implique pas qu'il n'y a pas d'exceptions. –

40

inclinaison originale de la asker à utiliser str.charCodeAt(i) semble être plus rapide que l'alternative d'expression régulière. Dans my test on jsPerf l'option RegExp effectue 66% plus lente dans Chrome 36 (et légèrement plus lente dans Firefox 31).

est ici une version assainis du code de validation d'origine qui reçoit une chaîne et renvoie true ou 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, telles que la lisibilité. Une expression régulière d'une ligne est certainement plus jolie à regarder. Mais si vous êtes strictement concerné par la vitesse, vous pouvez envisager cette alternative.

+8

Les programmeurs aiment le look du code, mais vous voyez sa beauté intérieure. – Ziggy

Questions connexes