Pouvez-vous s'il vous plaît suggérer le meilleur moyen possible d'effectuer une vérification alphanumérique d'un champ INPUT dans JSP? J'ai attaché mon code actuel et je sais que son pas près 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 this regex/^[a-z0-9]+$/i
L'inclination initiale du demandeur à utiliser 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 lentement 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 (A-Z)
!(code > 96 && code < 123)) { // lower alpha (a-z)
return false;
}
}
return true;
};
Bien entendu, il peut y avoir d'autres considérations, telles que la lisibilité. Une expression régulière à une ligne est définitivement plus jolie à regarder. Mais si vous êtes strictement préoccupé par la vitesse, vous pouvez envisager cette alternative.
Vous n'avez pas besoin de le faire un à la fois. Il suffit de faire un test pour tous ceux qui sont pas alphanumériques. S'il en trouve 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 nombre non alphanumérique, il sera return false
.
Vérifiez-le avec une regex.
Les regexen javascript n'ont pas de classes de caractères POSIX, vous devez donc écrire des plages de caractères manuellement:
if (!input_string.match(/^[0-9a-z]+$/))
show_error_or_something()
Ici ^
signifie début de chaîne et $
signifie fin de chaîne, et [0-9a-z]+
un ou plusieurs caractères de 0
à 9
OR de a
à z
.
Plus d'informations sur les expressions Javascript ici: https://developer.mozilla.org/fr/JavaScript/Guide/Regular_Expressions
Je créerais une méthode 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()
// 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 JavaScript alphanumérique.
Pour vérifier si chaîne_entrée est alphanumérique, utilisez simplement:
input_string.match(/[^\w]|_/) == null
Dans une boucle serrée, il vaut probablement mieux éviter les expressions rationnelles et coder en dur vos caractères:
function isAlphanumeric(char) {
return "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(char) > -1;
}