Pengembangan

Regex untuk Validasi Email, URL, dan Nomor Telepon

Regex validasi adalah jenis yang paling sering disalin, dan banyak di antaranya diam-diam keliru. Berikut pola yang berfungsi di form sungguhan, fungsi tiap bagiannya, dan kasus ketika regular expression ternyata alat yang salah.

Menengah · 8 menit baca · Diperbarui 30 Oktober 2026

Regex untuk Validasi Email, URL, dan Nomor Telepon

Validasi secara longgar, verifikasi secara nyata

Regex hanya bisa memberi tahu bahwa input terlihat seperti alamat email; hanya dengan mengirim pesan kita bisa membuktikan alamat itu benar-benar ada. Pola yang terlalu ketat menolak pengguna sungguhan, misalnya yang memakai tanda plus, domain panjang, atau nama internasional, sementara typo justru lolos. Targetkan pola yang menangkap kesalahan jelas, lalu lakukan verifikasi.

Alamat email

Pola praktis yang cocok dengan hampir semua alamat email sungguhan:

^[^\s@]+@[^\s@]+\.[^\s@]{2,}$

Ada teks, sebuah @, domain dengan titik, dan tanpa spasi. Pola ini menerima ada+news@example.co.uk dan menolak ada@example serta ada @example.com. Versi yang sedikit lebih ketat untuk bagian lokal:

^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$

Pola ini menolak alamat internasional (seperti josé@example.com), jadi pilih yang pertama jika penggunamu tersebar di seluruh dunia. Di HTML, <input type="email"> sudah melakukan validasi dengan aturan bawaan browser. Untuk memastikan sebuah domain benar-benar bisa menerima surat, cek rekaman MX-nya dengan Email DNS Checker.

URL

Jangan menulis regex untuk URL, cukup parse. Setiap runtime modern punya parser URL yang sudah memahami aturannya:

function isHttpUrl(value) {
  try {
    const u = new URL(value);
    return u.protocol === 'http:' || u.protocol === 'https:';
  } catch {
    return false;
  }
}

Memeriksa protokol itu penting: new URL('javascript:alert(1)') tetap terurai tanpa error, dan string seperti itu tidak boleh sampai masuk ke href. Jika kamu butuh regex untuk menemukan URL dalam teks, gunakan yang sederhana lalu parse setiap hasil kecocokannya:

https?:\/\/[^\s<>"']+

Pecah URL menjadi protokol, host, path, dan parameter query dengan URL Parser.

Nomor telepon

Format telepon berbeda-beda tiap negara, jadi regex yang paling aman hanya membersihkan input. Hapus semua karakter selain angka dan tanda plus di awal, lalu periksa panjangnya terhadap E.164 (maksimal 15 digit):

const clean = input.replace(/(?!^\+)[^\d]/g, '');
const ok = /^\+?[1-9]\d{6,14}$/.test(clean);

Untuk validasi nyata per negara, seperti kode area dan perbedaan nomor seluler vs telepon rumah, gunakan library seperti libphonenumber. Berikut pola khusus Amerika Utara, jika itu satu-satunya yang kamu terima:

^\(?([2-9]\d{2})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})$

Uji sebelum rilis

Tempel pola ke Regex Tester beserta daftar sampel valid dan tidak valid, satu per baris, lalu aktifkan flag multiline agar ^ dan $ cocok di setiap baris. Jika pola warisan yang kamu terima sulit dibaca, Regex Explainer akan memecahnya token demi token. Waspadai catastrophic backtracking: quantifier bersarang seperti (a+)+ bisa membuat server macet saat menerima input yang sengaja dibuat untuk itu.

Pertanyaan yang sering diajukan

Apa regex terbaik untuk validasi email?
Yang sederhana: ^[^\s@]+@[^\s@]+\.[^\s@]{2,}$. Pola kompleks bergaya RFC justru menolak alamat yang valid dan tetap tidak bisa membuktikan bahwa kotak masuknya ada. Untuk itu, kirim email konfirmasi.
Perlukah memvalidasi URL dengan regex?
Tidak. Gunakan parser URL bawaan bahasamu (new URL() di JavaScript, urllib.parse di Python) dan pastikan protokolnya http atau https.
Kenapa regex saya berfungsi pada satu baris tapi tidak pada daftar?
Tanpa flag m (multiline), ^ dan $ cocok dengan awal dan akhir seluruh teks, bukan setiap baris.

Baca juga