Entschuldigung, keine Kontroverse. Aber damit die Community so wächst, wie ich in diesen Jahren gewachsen bin, ist es gut, sich Notizen zu machen.
Die echte alphanumerische Zeichenfolge ist wie "0a0a0a0b0c0d"
und nicht wie "000000"
oder "qwertyuio"
.
Alle Antworten, die ich hier gelesen habe, sind true
in beiden Fällen zurückgekehrt. Und vergib mir, IMHO, das ist nicht richtig .
Wenn ich überprüfen möchte, ob meine "00000"
Zeichenfolge alphanum ist, ist meine "menschliche" Antwort zweifellos FALSCH.
Warum? Einfach. Ich kann keinen Buchstaben char finden. Ist also eine einfache numerische Zeichenfolge [0-9]
.
Wenn ich andererseits meine "abcdefg"
Zeichenfolge überprüfen wollte , ist meine "menschliche" Antwort sogar FALSCH. Ich sehe keine Zahlen, daher ist es nicht alphanumerisch. Nur Alpha [a-zA-Z]
.
Die Antwort von Michael Martin-Smucker war aufschlussreich.
Er strebte jedoch eine bessere Leistung anstelle von Regex an. Dies ist wahr, wenn man einen niedrigen Level verwendet, gibt es eine bessere Leistung. Aber die Ergebnisse sind die gleichen. Die Zeichenfolgen "0123456789"
(nur numerisch), "qwertyuiop"
(nur Alpha) und "0a1b2c3d4f4g"
(alphanumerisch) werden TRUE
als alphanumerisch zurückgegeben. Gleicher Regex- /^[a-z0-9]+$/i
Weg. Der Grund, warum die Regex nicht funktioniert, ist so einfach wie offensichtlich. Die Syntax []
gibt oder , nicht und an . Wenn es also nur numerisch ist oder wenn es nur Buchstaben sind, gibt Regex zurück true
.
Aber der Michael Martin-Smucker Antwort wurde dennoch aufschlussreich. Für mich. Es erlaubte mir, auf "niedriger Ebene" zu denken, um eine echte Funktion zu erstellen, die eine alphanumerische Zeichenfolge eindeutig verarbeitet. Ich nannte es wie PHP relative Funktion ctype_alnum
( edit 2020-02-18: Wobei dies jedoch OR und nicht AND prüft ).
Hier ist der 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
};
... und hier ist die DEMO
Ich bin zu dieser Diskussion gekommen, weil ich nach einer Alternative in Javascript zur PHP-Funktion gesucht habe. Ich habe die Antwort "Ready-to-Go" nicht gefunden, aber wie so oft bei Stackoverflow ist das Konzept des Wissens und des Vergleichs untereinander etwas Erhabenes, das Sie dazu bringt, über die Antwort von jemandem nachzudenken und gemeinsam die Lösung zu finden, die Sie waren suchen, aber Sie dachten nicht, dass Sie es wussten.
Und teile es!
Beste
Oscar