Character class adalah daftar karakter yang boleh muncul di satu posisi, ditulis di dalam kurung siku: [0-9] artinya "satu angka, 0 sampai 9". Bayangin gembok koper dengan roda angka. Tiap roda cuma bisa menunjukkan satu karakter, dan pilihannya cuma 0 sampai 9. Gembok empat roda sama dengan [0-9][0-9][0-9][0-9]: empat posisi, tiap posisi satu angka.
🧪 Tebakan cepat:
"Rp85.000".match(/[0-9]/g)hasilnya['85', '000']atau['8', '5', '0', '0', '0']? Tebak dulu, jawabannya ada di bagian "Satu class, satu karakter".
Satu class, satu karakter
console.log("Rp85.000".match(/[0-9]/g)); // ['8', '5', '0', '0', '0']
console.log(chat.match(/08[0-9][0-9]/g)); // ['0812', '0812']
[0-9]cocok dengan satu karakter, apa pun angkanya. Dengang, tiap angka jadi satu hasil sendiri. Jadi hasilnya lima angka terpisah, bukan85dan000. Itu jawaban tebakannya.08[0-9][0-9]cocok dengan08lalu dua angka apa saja: awal nomor Dina0812-3456-7890dan nomor Sari081298765432.[aeiou]cocok dengan satu huruf vokal. Urutan isi daftar gak penting:[aeiou]sama dengan[uoiea].
Rentang dan gabungan
Tanda - di antara dua karakter membuat rentang:
[0-9]angka,[a-z]huruf kecil,[A-Z]huruf besar.- Rentang boleh digabung dalam satu class:
[A-Za-z0-9]artinya satu huruf besar, huruf kecil, atau angka. - Rentang mengikuti urutan kode karakter, jadi ujung kiri harus lebih kecil.
[a-Z]ditolak:Invalid regular expression: /[a-Z]/: Range out of order in character class.
Negasi: [^...]
^ tepat setelah [ membalik daftarnya: satu karakter apa pun selain isi daftar.
console.log("Rp85.000".match(/[^0-9]/g)); // ['R', 'p', '.']
[^0-9] ikut cocok dengan spasi dan ganti baris, karena keduanya juga bukan angka. ^ cuma membalik kalau ada di posisi pertama: [0-9^] artinya angka atau tanda ^.
Shorthand: \d, \w, \s
Tiga class yang paling sering dipakai punya singkatan:
console.log("Rp85.000".match(/\d/g)); // ['8', '5', '0', '0', '0']
console.log("Rp85.000".match(/\D/g)); // ['R', 'p', '.']
\d(digit) sama dengan[0-9].\w(word) sama dengan[A-Za-z0-9_]: huruf, angka, dan garis bawah.\s(space) cocok dengan spasi, tab, dan ganti baris.- Huruf besar artinya kebalikannya:
\Dsemua kecuali digit,\Wbukan huruf/angka/garis bawah,\Sbukan spasi.
\d cuma mengenal angka ASCII 0 sampai 9. /\d/.test("٣") (angka Arab) dan /\d/.test("1") (angka lebar penuh) dua-duanya false.
Metacharacter di dalam kurung siku
Di dalam [...], kebanyakan metacharacter jadi karakter biasa. [.,] artinya titik atau koma, bukan "karakter apa pun":
console.log("Rp85.000 atau Rp85,000".match(/[.,]/g)); // ['.', ',']
Yang masih punya arti khusus di dalam kurung siku cuma empat: ] menutup daftar, \ untuk escape, ^ di posisi pertama untuk negasi, dan - di antara dua karakter untuk rentang. Mau - biasa? Taruh di ujung: [0-9-] artinya angka atau tanda strip.
Cek seluruh teks: +, {n}, ^, dan $
Satu class cuma satu karakter. Buat validasi isian, kenalan dulu dengan empat tanda ini (detailnya di dua pelajaran berikutnya):
+setelah class: satu atau lebih karakter dari daftar, berturut-turut.{4}setelah class: tepat 4 karakter.^di awal pola (di luar kurung siku): mulai dari awal teks.$di akhir pola: sampai akhir teks.
console.log("Rp85.000".match(/[0-9]+/g)); // ['85', '000']
console.log("Rp85.000".match(/[0-9.]+/g)); // ['85.000']
console.log("abc123".match(/[a-z]+/g)); // ['abc']
const kodeSah = /^PO-[0-9]{4}$/;
console.log(kodeSah.test("PO-0413")); // true
console.log(kodeSah.test("Kode PO-0413")); // false: ada teks sebelum PO
console.log(kodeSah.test("PO-04133")); // false: 5 angka
console.log(/[0-9]/.test("Kode PO-0413")); // true: cukup ada satu angka
- Tanpa
^dan$,test()sudah puas menemukan potongan yang cocok di mana saja. Buat "isinya cuma ini", pasang keduanya. +minta minimal satu karakter, jadi teks kosong""gak lolos/^[0-9]+$/.- Ada dua panjang yang sah, misalnya kode 4 atau 6 angka? Gabungkan dua pengecekan dengan
||:/^PO-[0-9]{4}$/.test(kode) || /^PO-[0-9]{6}$/.test(kode).
⚠️ Jebakan yang sering ketemu
- Mengira class mengambil banyak karakter.
[0-9]cuma satu karakter. Butuh angka utuh?[0-9]+. - Lupa
^dan$saat validasi./[A-Za-z0-9]+/.test("Hello 123")hasilnyatrue, karenaHellosaja sudah cocok./^[A-Za-z0-9]+$/menjawabfalse. [A-z]kelihatan seperti semua huruf. Di antaraZdanaada[ \ ] ^ _dan backtick, jadi semuanya ikut. Tulis[A-Za-z].\ddi string.new RegExp("\d")jadi/d/, mencari huruf d. Di string, tulis"\\d".
TL;DR: [...] cocok dengan satu karakter dari daftar. - membuat rentang ([0-9], [a-z], [A-Za-z0-9]), ^ di posisi pertama membalik daftar ([^0-9]), dan di dalam kurung siku . dan kebanyakan metacharacter jadi biasa. \d = [0-9] (angka ASCII saja), \w = [A-Za-z0-9_], \s = spasi, tab, ganti baris; huruf besarnya kebalikan (\D = bukan digit). Buat validasi: + satu atau lebih, {n} tepat n, ^ dan $ mengunci awal dan akhir teks, dan || menggabungkan dua pola.