Meilleure façon de alphanumérique vérification en Javascript
Pouvez-vous s'il vous plaît suggérer la meilleure façon possible afin d'effectuer une alpha numérique de vérifier sur un champ de SAISIE dans JSP? J'ai joint mon code actuel et je sais que c'est pas si proche de la perfection 🙂
<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;
}
- Dépend de la définition de "meilleur". La plupart des réponses ci-dessous suggèrent regex, qui effectue beaucoup plus lent que votre code original. J'ai nettoyer votre code un peu, qui a en fait très bien.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser cette regex
/^[a-z0-9]+$/i
""
) ne doit pas être appariés.ñ
ne tombe pas dans le motif de l'cependant pleinement UTF-8 valide char.charCodeAt()
. Voir jsPerf et ma réponse ci-dessous."00"
et une chaîne"a0"
retourtrue
dans les deux cas, comme une conséquence de la regexp[]
moyen de signe OU et non ET. La chaîne"00"
doit retournefalse
parce que n'est pas un aphanumeric de la chaîne, mais un couple de zéros. À mon humble avisLe sens d'origine de l'inclinaison de l'utilisation
str.charCodeAt(i)
semble être plus rapide que l'expression régulière alternative. Dans mon test sur jsPerf la RegExp option effectue 66% plus lent dans google Chrome 36 (et un peu plus lent dans Firefox 31).Ici sa propre version de l'original d'un code de validation qui reçoit une chaîne de caractères et renvoie
true
oufalse
:Bien sûr, il y a peut être d'autres considérations, telles que la lisibilité. Une ligne d'expression régulière est certainement plus joli à regarder. Mais si vous êtes strictement concernées par la vitesse, vous pouvez envisager cette alternative.
Vous n'avez pas besoin de le faire une à la fois. Viens de faire un test pour ceux qui sont pas alpha-numérique. Si c'est le cas, la validation échoue.
Si il y a au moins un match d'un non alpha numériques, il
return false
.Vérifier avec une regex.
Javascript regexen n'ont pas de classes de caractères POSIX, donc, vous devez écrire les plages de caractères manuellement:
Ici
^
signifie le début de la chaîne et de$
signifie la fin de la chaîne, et[0-9a-z]+
désigne une ou plusieurs caractères de0
à9
OU dea
àz
.Plus d'informations sur le Javascript regexen ici:
https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
/^[a-z0-9]+$/i
et cela permettra de couvrir à la fois les lettres minuscules et majusculesJe voudrais créer une Chaîne de prototype de la méthode:
Ensuite, l'utilisation serait:
De plus, cet article aide également à comprendre JavaScript alphanumérique de validation.
Excusez-moi tous, pas de polémique. Mais pour la communauté de se développer comme il a grandi moi dans ces années, il est bon de faire quelques remarques.
Le véritable chaîne alphanumérique est comme
"0a0a0a0b0c0d"
et non pas comme"000000"
ou"qwertyuio"
.Toutes les réponses que j'ai lu ici, retourné
true
dans les deux cas. Et pardonnez-moi, à mon humble avis, ce n'est pas juste.Si je veux vérifier si mon
"00000"
chaîne numérique, mon "homme" réponse est définitivement FAUX.Pourquoi? Simple. Je ne trouve aucune lettre char. Donc, est une simple chaîne numérique
[0-9]
.Sur l'autre main, si je voulais vérifier mon
"abcdefg"
chaîne, mon "homme" la réponse est encore FAUX. Je ne vois pas de numéros, de sorte qu'il n'est pas alphanumérique. Juste alpha[a-zA-Z]
.La Michael Martin-Smucker's réponse a été éclairante.
Cependant il était visant à améliorer la performance au lieu de regex. C'est vrai, à l'aide d'un faible niveau moyen il y a une meilleure performance. Mais les résultats c'est la même chose.
Les chaînes
"0123456789"
(uniquement numérique),"qwertyuiop"
(seul alpha) et"0a1b2c3d4f4g"
(alphanumérique) renvoieTRUE
alphanumériques. Même regex/^[a-z0-9]+$/i
façon.La raison pour laquelle la regex ne fonctionne pas est aussi simple qu'évidente. La syntaxe
[]
indique ou, pas et.Donc, si c'est uniquement numérique ou si c'est uniquement des lettres, des regex retourne
true
.Mais, le Michael Martin-Smucker's réponse était néanmoins éclairante. Pour moi.
Il m'a permis de penser à "bas niveau", de créer une véritable fonction qui sans ambiguïté
les processus d'une chaîne alphanumérique. Je l'ai appelé comme PHP fonction relative
ctype_alnum
.Voici le code:
... et voici le DÉMO
Je suis venu à cette discussion parce que je cherchais une alternative à javascript pour la fonction PHP. Je n'ai pas trouver la réponse sur le "prêt-à-go", mais comme cela arrive souvent sur Stackoverflow, le concept de la connaissance et de comparaison avec les autres est quelque chose de sublime, qui vous conduit à penser la réponse de quelqu'un et trouver ensemble la solution que vous cherchez, mais vous ne pensiez pas que vous le saviez.
Et de le partager!
Meilleur
Oscar
Pour vérifier si input_string est alphanumérique, il suffit d'utiliser:
Dans une boucle serrée, il est probablement préférable d'éviter les regex et coder en dur vos personnages: