Permisi semua, tidak ada kontroversi. Tetapi agar komunitas dapat tumbuh seperti yang telah menumbuhkan saya di tahun-tahun ini, ada baiknya membuat beberapa catatan.
String alfanumerik yang sebenarnya adalah seperti "0a0a0a0b0c0d"
dan bukan seperti "000000"
atau "qwertyuio"
.
Semua jawaban yang saya baca di sini, dikembalikan true
dalam kedua kasus. Dan maafkan saya, IMHO, ini tidak benar .
Jika saya ingin memeriksa apakah "00000"
string saya alfanum, jawaban "manusia" saya tidak diragukan lagi SALAH.
Mengapa? Sederhana. Saya tidak dapat menemukan karakter huruf apa pun. Jadi, adalah string numerik sederhana [0-9]
.
Di sisi lain, jika saya ingin memeriksa "abcdefg"
string saya, jawaban "manusia" saya malah SALAH. Saya tidak melihat angka, jadi bukan alfanumerik. Hanya alfa [a-zA-Z]
.
Jawaban Michael Martin-Smucker telah mencerahkan.
Namun dia bertujuan untuk mencapai kinerja yang lebih baik daripada regex. Ini benar, menggunakan cara tingkat rendah akan menghasilkan kinerja yang lebih baik. Tapi hasilnya sama saja. String "0123456789"
(hanya numerik), "qwertyuiop"
(hanya alfa) dan "0a1b2c3d4f4g"
(alfanumerik) ditampilkan TRUE
sebagai alfanumerik. /^[a-z0-9]+$/i
Cara regex yang sama . Alasan mengapa regex tidak berfungsi sesederhana itu. Sintaksnya []
menunjukkan atau , bukan dan . Jadi, jika hanya numerik atau hanya huruf, regex mengembalikan true
.
Tapi, jawaban Michael Martin-Smucker tetap mencerahkan. Untuk saya. Ini memungkinkan saya untuk berpikir di "level rendah", untuk membuat fungsi nyata yang memproses string alfanumerik dengan jelas. Saya menyebutnya seperti fungsi relatif PHP ctype_alnum
( edit 2020-02-18: Di mana, bagaimanapun, ini memeriksa ATAU dan bukan DAN ).
Berikut kodenya:
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
};
... dan inilah DEMO
Saya datang ke diskusi ini karena saya mencari alternatif dalam javascript untuk fungsi PHP. Saya tidak menemukan jawaban "ready-to-go", tetapi seperti yang sering terjadi di Stackoverflow, konsep pengetahuan dan perbandingan satu sama lain adalah sesuatu yang luhur, yang membuat Anda berpikir tentang jawaban seseorang dan menemukan bersama solusi Anda. mencari, tetapi Anda tidak berpikir Anda mengetahuinya.
Dan bagikan!
Terbaik
Oscar