Excusez-moi à tous, pas de controverse. Mais pour que la communauté grandisse comme elle m'a fait grandir ces dernières années, il est bon de prendre quelques notes.
La vraie chaîne alphanumérique est comme "0a0a0a0b0c0d"
et pas comme "000000"
ou "qwertyuio"
.
Toutes les réponses que j'ai lues ici, sont retournées true
dans les deux cas. Et pardonnez-moi, à mon humble avis, ce n'est pas juste .
Si je veux vérifier si ma "00000"
chaîne est alphanum, ma réponse "humaine" est incontestablement FAUX.
Pourquoi? Facile. Je ne trouve aucune lettre char. Donc, est une simple chaîne numérique [0-9]
.
Par contre, si je voulais vérifier ma "abcdefg"
chaîne, ma réponse "humaine" est même FAUX. Je ne vois pas de chiffres, donc ce n'est pas alphanumérique. Juste alpha [a-zA-Z]
.
La réponse de Michael Martin-Smucker a été éclairante.
Cependant, il visait à obtenir de meilleures performances au lieu de regex. C'est vrai, en utilisant un moyen de bas niveau, il y a une meilleure performance. Mais les résultats sont les mêmes. Les chaînes "0123456789"
(uniquement numérique), "qwertyuiop"
(uniquement alpha) et "0a1b2c3d4f4g"
(alphanumérique) sont renvoyées TRUE
sous forme alphanumérique. Même /^[a-z0-9]+$/i
manière de regex . La raison pour laquelle l'expression régulière ne fonctionne pas est aussi simple qu'évidente. La syntaxe []
indique ou , non et . Donc, si c'est uniquement numérique ou si ce n'est que des lettres, regex retourne true
.
Mais la réponse de Michael Martin-Smucker était néanmoins éclairante. Pour moi. Cela m'a permis de penser à "bas niveau", de créer une vraie fonction qui traite sans ambiguïté une chaîne alphanumérique. Je l'ai appelé comme fonction relative PHP ctype_alnum
( modifier 2020-02-18: Où, cependant, cela vérifie OU et non ET ).
Voici le code:
function ctype_alnum(str) {
var code, i, len;
var isNumeric = false, isAlpha = false; //I assume that it is all non-alphanumeric
for (i = 0, len = str.length; i < len; i++) {
code = str.charCodeAt(i);
switch (true){
case code > 47 && code < 58: // check if 0-9
isNumeric = true;
break;
case (code > 64 && code < 91) || (code > 96 && code < 123): //check if A-Z or a-z
isAlpha = true;
break;
default: // not 0-9, not A-Z or a-z
return false; //stop function with false result, no more checks
}
}
return isNumeric && isAlpha; //return the loop results, if both are true, the string is certainly alphanumeric
};
... et voici la DEMO
Je suis venu à cette discussion parce que je cherchais une alternative en javascript à la fonction PHP. Je n'ai pas trouvé la réponse «prête à l'emploi», mais comme cela arrive souvent sur Stackoverflow, le concept de connaissance et de comparaison les uns avec les autres est quelque chose de sublime, qui vous amène à réfléchir à la réponse de quelqu'un et à trouver ensemble la solution que vous étiez chercher, mais vous ne pensiez pas que vous le saviez.
Et partagez-le!
Meilleur
oscar