Meilleur moyen de vérification alphanumérique en Javascript

Pouvez-vous suggérer la meilleure manière possible d'effectuer une vérification alphanumérique sur un champ INPUT dans JSP? J'ai attaché mon code actuel et je sais qu'il n'est pas proche de parfait 🙂

<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; } 

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

L'inclinaison originale de l'utilisateur pour l'utilisation de str.charCodeAt(i) semble être plus rapide que l'alternative d'expression régulière. Dans mon test sur jsPerf, l'option RegExp fonctionne 66% plus lentement dans Chrome 36 (et légèrement plus lente dans Firefox 31).

Voici une version nettoyée 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 (AZ) !(code > 96 && code < 123)) { // lower alpha (az) 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 voudrez peut-être envisager cette alternative.

Vous n'avez pas besoin de le faire un à la fois. Il suffit de faire un test pour ceux qui ne sont pas alphanumériques. Si l'on le trouve, 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 non alphanumérique, il return false .

Vérifiez-le avec un regex.

Javascript regexen n'a pas de classes de caractères POSIX, donc vous devez écrire des 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 la fin de la chaîne, et [0-9a-z]+ signifie un ou plusieurs des caractères de 0 à 9 OR de a à z .

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

  // 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, cet article aide également à comprendre la validation alphanumérique JavaScript.

Je créerais une méthode de prototype String:

 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()