Affedersiniz, tartışma yok. Ancak bu yıllarda beni büyüdükçe topluluğun da büyümesi için bazı notlar almakta fayda var.
Gerçek alfanümerik dizge veya gibi "0a0a0a0b0c0d"
değil, gibidir ."000000"
"qwertyuio"
Her true
iki durumda da burada okuduğum tüm cevaplar geri döndü . Ve affet beni, IMHO, bu doğru değil .
"00000"
Dizimin alfanum olup olmadığını kontrol etmek istersem , "insan" cevabım şüphesiz YANLIŞ olacaktır.
Neden? Basit. Herhangi bir harf karakteri bulamıyorum. Yani, basit bir sayısal dizedir [0-9]
.
Öte yandan, kontrol etmek istersem "abcdefg"
, "insan" cevabım YANLIŞ bile olur. Sayıları görmüyorum, bu yüzden alfanümerik değil. Sadece alfa [a-zA-Z]
.
Michael Martin-Smucker cevabı aydınlatıcı olmuştur.
Ancak, normal ifade yerine daha iyi performans elde etmeyi hedefliyordu. Bu doğru, düşük seviyeli bir yol kullanarak daha iyi bir performans var. Ancak sonuçlar aynı. Dizeler "0123456789"
(yalnızca sayısal), "qwertyuiop"
(yalnızca alfa) ve "0a1b2c3d4f4g"
(alfanümerik) TRUE
alfanümerik olarak döndürülür . Aynı normal ifade /^[a-z0-9]+$/i
yolu. Normal ifadenin çalışmamasının nedeni açık olduğu kadar basittir. Sözdizimi []
gösterir veya değil ve . Dolayısıyla, yalnızca sayısalsa veya yalnızca harflerden oluşuyorsa, normal ifade döndürür true
.
Ancak, Michael Martin-Smucker'ın cevabı yine de aydınlatıcıydı. Benim için. Alfasayısal bir dizgeyi kesin olarak işleyen gerçek bir işlev yaratmak için "düşük seviyede" düşünmeme izin verdi. Bunu PHP göreli işlevi olarak adlandırdım ctype_alnum
( 2020-02-18'i düzenleyin: Bununla birlikte, bu AND'yi değil VE'yi kontrol eder ).
İşte kod:
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
};
... ve işte DEMO
Bu tartışmaya geldim çünkü javascript'te PHP işlevine bir alternatif arıyordum. "Kullanıma hazır" cevabını bulamadım, ancak Stackoverflow'da sıklıkla olduğu gibi, bilgi kavramı ve birbirleriyle karşılaştırma, sizi birinin cevabı hakkında düşünmeye ve birlikte bulmaya yönlendiren yüce bir şeydir bulunduğunuz çözümü arıyorsun, ama bildiğini düşünmedin.
Ve paylaşın!
En iyi
Oscar