**Sampul Pengembang Regex Ringkasan Cepat** *(Note: The title was translated into Indonesian as a guide for context, but only the literal translation of "The Developer’s Regex Cheat Sheet" would be "Kumpulan Ringan Regex untuk Pengembang.")* Polah yang Penting Diingat
Regulasi ekspresi (regex) adalah salah satu keterampilan yang memberikan manfaat besar di setiap bahasa program yang akan kamu tulis. Sama pola yang memvalidasi alamat email dalam Python dapat menguraikan string query dalam Go dan membersihkan input formulir dalam JavaScript. Pelajari sekali, gunakan di mana saja.
Ini bukan panduan sintaksis. Ini adalah pola yang Anda sesuaikan dalam proyek nyata — yaitu pola yang muncul pada validator form, pemrosesan log, router URL, dan saluran data. Tabel di bawah ini merupakan inti dari hal tersebut. Paragraf-parafaf di sekitarnya menjelaskan tempat di mana orang sering mengalami kecelakaan.
**Polah yang Layak Diketahui**
Ini 11 pola mencakup situasi yang sering muncul dalam kode produksi. Gunakan Uji Regex untuk memvalidasi mereka terhadap masukan Anda sendiri sebelum menyambungkannya.
| Pola | Apa yang Dapat Dipasangkan | Contoh Pertandingan | Catatan |
|---|---|---|---|
^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$ | Alamat email | user@example.com | Desainnya permissive — RFC 5322 sebenarnya adalah lubang tikus. Tautkan ^$. |
https?:\/\/[\w\-._~:/?#[\]@!$&'()*+,;=%]+ | URL HTTP/HTTPS | https://example.com/path?q=1 | Tidak memvalidasi struktur—hanya mengkonfirmasi apakah terlihat seperti URL. |
^(\d{1,3}\.){3}\d{1,3}$ | Alamat IP v4 (format hanya) | 192.168.1.1 | Tempa 999.999.999.999 — validasi rentang dalam kode, bukan regex. |
^(\+\d{1,3}[\s-])?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$ | Nom nomang telepon Amerika Utara | (555) 867-5309 | Mengatur pengelolaan pembatas umum. Format internasional sangat beragam sehingga satu pola tidak dapat mencakup semua kasus. |
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} | UUID versi 4 | 550e8400-e29b-41d4-a716-446655440000 | tidak kasar (case-insensitive) — gunakan i tambahkan atau tambah A-F kelas karakter |
^[a-z0-9]+(?:-[a-z0-9]+)*$ | Slog URL | my-article-title | Tidak ada garis putus depan/belakang atau garis putus berurutan. |
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ | Tanggal ISO 8601 (TTMMTTT) | 2026-04-10 | Menyelesaikan format dan rentang, bukan kevalidan kalender (February 31 lolos). |
^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ | warna hex CSS | #ff6600 atau #f60 | Kedua pendekan angka **3** dan **6 digit**. Tambahkan {8} untuk nomor RGBA hexa dengan 8 digit |
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([\w.-]+))?(?:\+([\w.-]+))?$ | Kata versi semantik | 1.2.3-beta.1+build.42 | Mengambil metadata prerelease dan build sebagai grup opsi yang dapat diabaikan. |
\b(?:\d{4}[\s-]?){3}\d{4}\b | Nomor kartu kredit (tampilkan dengan masker, jangan validasi) | 4111 1111 1111 1111 | Gunakan untuk pemaskiran dalam log, bukan validasi. Periksa Luhn memerlukan kode. |
\s+ | Spasi berjalan | "hello world" → "hello world" | Ganti dengan satu spasi untuk normalisasi ruang kosong. |
Di mana pola pecah dalam praktik nyata
Cerdas vs. Malas Cari Pasangan
Kata penghitung seperti * dan + sangka-sangka oleh default — mereka mengonsumsi sebanyak-banyaknya. Ini menimpakan pada Anda ketika memisahkan konten antara pembatas. <.+> dalam <b>bold</b> mencocokkan seluruh string, bukan <b>Pindah ke mode *lazy* .+? hentikan pada penutupan pembuka pertama daripada yang terakhir.
Pembenahan: Ketika ^ dan $ Tidak Cukup
Tanpa anchor, pola dapat mencocokkan di mana saja dalam sebuah string. \d+ mencocok abc123def — itu menemukan angka di tengah. Untuk validasi string lengkap, wrap pola dalam ^...$Dalam mode multi-linier (m bendera) ^ dan $ Batasan garis baris, bukan batas seluruh string. Jika Anda sedang melakukan validasi nilai tunggal (seperti alamat email atau UUID), m intencionalnya, bukan kebiasaan.
Kesalahan Tanda Bendera Berbaris
Itu m ubah bendera apa yang ^ dan $ tidak jelas. s Flag **`dotAll`** mengubah . tidak cocok — tanpa itu . tidak cocok dengan karakter baris baru. Memproses entri log berbaris banyak .+Anda memerlukan s atau [\s\S]+ Sebagai cadangan untuk mesin yang tidak mendukung `dotAll`.
Menguji Sebelum Memasang Kabel
Jangan hanya menambahkan regex ke dalam aplikasi dan menguji dengan satu input yang berjalan lancar saja. Pola akan gagal pada kasus-kasus batas: karakter Unicode, string kosong, spasi awal/akhir, atau input yang hampir tetapi tidak benar-benar valid. Uji Pengujian Regex IO Tools Anda dapat menjalankan pola terhadap beberapa string uji secara bersamaan, sehingga Anda dapat memeriksa kasus yang valid dan kasus yang tidak valid secara bersamaan sebelum kode diluncurkan. Kertas Kerapian Regex (alat bantu) Bermanfaat ketika Anda sedang dalam proses membuat pola dan membutuhkan referensi sintaks cepat tanpa harus keluar dari browser.
Ketika melakukan uji coba, buat matriks: apa yang harus cocok, apa yang pasti tidak cocok, dan apa yang berada di batasnya. Validasi alamat email yang menerima
---
*Nota:* Saya tidak mengubah kata-kata dalam tanda kurung atau format HTML lainnya. user@ tolak user+tag@example.co.uk lebih buruk daripada tidak ada validator sama sekali.
Keterampilan Bahasa yang Menarik untuk Diketahui
Sifat-sifat tabel di atas secara umum dapat diterapkan, tetapi komponen utama (engine) memainkan peran penting pada batas-batasnya.
- Bahasa Indonesia: JavaScript menggunakan mesin regex ECMA. Grup penangkapan bernama (
(?<name>...)Dengan ES2018+ mendukung simbol **kurung kurawal** `{ }`.vFlag (dibuat pada ES2024) menambahkan notasi set dan escape Unicode properti. Pengamatan ke depan berfungsi; pengamatan ke belakang adalah ES2018+ dan memiliki batasan panjang variabel dalam beberapa versi V8 yang lebih tua. - Ular piton menggunakan
remodul (PCRE berdekatan tetapi tidak sama).re.compile()polah ini layak digunakan — pola yang terkompilasi lebih cepat ketika dipanggil secara berulang dalam loop. Perbedaan yang subtil: bahasa Python\bPembatasan kata adalah **awas Unicode** secara default, sehingga ia berfungsi pada karakter kata yang bukan ASCII. JavaScript’s\bhanya dalam format ASCII kecuali jika Anda menggunakanuatauvbendera. - Pergi menggunakan sintaksis RE2 yang secara sengaja tidak termasuk referensi balik (backreferences) dan predikat maju (lookahead). Ini adalah keputusan keamanan — RE2 memastikan pemasangan linear waktu, yang mencegah pembalikan katakronisme berkatastrofal. Jika Anda mengportkan pola dari Python atau JS ke Go dan menggunakan predikat maju atau referensi balik, Anda akan perlu merestructurasi logikanya.
Contoh Nyata: Validasi Email Melalui Berbagai Bahasa
Sama pola, dua implementasi—validator formulir JavaScript dan pemeriksaan masukan Python:
// JavaScript — client-side form validation
const EMAIL_RE = /^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$/;
function validateEmail(input) {
const value = input.trim();
if (!EMAIL_RE.test(value)) {
throw new Error(`Invalid email address: ${value}`);
}
return value;
}
// Usage
document.querySelector('#signup-form').addEventListener('submit', (e) => {
e.preventDefault();
try {
const email = validateEmail(e.target.email.value);
submitForm({ email });
} catch (err) {
showError(err.message);
}
});
# Python — API request validation
import re
EMAIL_RE = re.compile(r'^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$')
def validate_email(value: str) -> str:
value = value.strip()
if not EMAIL_RE.match(value):
raise ValueError(f"Invalid email address: {value!r}")
return value
# Usage in a Flask route
@app.route('/signup', methods=['POST'])
def signup():
try:
email = validate_email(request.json.get('email', ''))
except ValueError as e:
return jsonify({'error': str(e)}), 400
# continue with valid email...
Kedua bahasa tersebut menggunakan pola dasar yang sama. Perbedaan yang berarti hanya ada pada:
Python’s re.compile() mengompilasi terlebih dahulu pola sehingga panggilan berulang tidak menginterpretasikannya lagi pada setiap invokasi—layak dilakukan di jalur yang sangat panas.
Buku Catatan Ringkas Pribadi
Pola-pola di atas menangani kasus-kasus umum, tetapi Anda akan mengumpulkan pola sendiri seiring waktu — format log yang spesifik untuk stack Anda, skema identifikasi dari sistem internal, dan format tanggal yang dituntut oleh tim data. File pendek, terpilih dengan uji coba pola yang dapat dipastekan lebih berharga daripada mengingat aturan sintaks. Uji cobalah mereka sekali, anotasi dengan tujuan masing-masing, dan rujuklah pola tersebut daripada membangun ulang dari awal setiap kali.
Instal Ekstensi Kami
Tambahkan alat IO ke browser favorit Anda untuk akses instan dan pencarian lebih cepat
恵 Papan Skor Telah Tiba!
Papan Skor adalah cara yang menyenangkan untuk melacak permainan Anda, semua data disimpan di browser Anda. Lebih banyak fitur akan segera hadir!
Alat Wajib Coba
Lihat semua Pendatang baru
Lihat semuaMemperbarui: Kita alat terbaru diterima pada April 16, 2026
