Cara termudah dan teraman untuk memeriksa apakah alamat email terbentuk dengan baik adalah dengan menggunakan filter_var()
fungsi ini:
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// invalid emailaddress
}
Selain itu Anda dapat memeriksa apakah domain mendefinisikan MX
catatan:
if (!checkdnsrr($domain, 'MX')) {
// domain is not valid
}
Tetapi ini masih tidak menjamin bahwa surat itu ada. Satu-satunya cara untuk mengetahuinya adalah dengan mengirim surat konfirmasi.
Sekarang setelah Anda mendapatkan jawaban yang mudah, jangan ragu untuk membaca tentang validasi alamat email jika Anda ingin belajar atau cukup gunakan jawaban cepat dan lanjutkan. Tidak ada perasaan keras.
Mencoba memvalidasi alamat email menggunakan regex adalah tugas yang "mustahil". Saya akan mengatakan bahwa regex yang Anda buat tidak berguna. Ada tiga rfc mengenai alamat email dan menulis regex untuk menangkap alamat email yang salah dan pada saat yang sama tidak memiliki positif palsu adalah sesuatu yang tidak dapat dilakukan oleh manusia. Lihatlah daftar ini untuk tes (gagal dan berhasil) dari regex yang digunakan oleh filter_var()
fungsi PHP .
Bahkan fungsi PHP bawaan, klien email atau server tidak dapat melakukannya dengan benar. Masih dalam banyak kasus filter_var
adalah pilihan terbaik.
Jika Anda ingin tahu pola regex mana yang digunakan PHP (saat ini) untuk memvalidasi alamat email, lihat sumber PHP .
Jika Anda ingin mempelajari lebih lanjut tentang alamat email, saya sarankan Anda untuk mulai membaca spesifikasi, tetapi saya harus memperingatkan Anda bahwa itu tidak mudah dibaca oleh peregangan apa pun:
Perhatikan bahwa filter_var()
sebagaimana telah dinyatakan hanya tersedia pada PHP 5.2. Jika Anda ingin bekerja dengan versi PHP yang lebih lama, Anda bisa menggunakan regex yang digunakan dalam PHP:
<?php
$pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
$emailaddress = 'test@gmail.com';
if (preg_match($pattern, $emailaddress) === 1) {
// emailaddress is valid
}
PS Catatan tentang pola regex yang digunakan di atas (dari sumber PHP). Sepertinya ada beberapa hak cipta di atasnya dari Michael Rushton . Seperti yang dinyatakan: "Jangan ragu untuk menggunakan dan mendistribusikan kembali kode ini. Tetapi harap simpan pemberitahuan hak cipta ini."
validateEmail
akan corret, serta lewat$email
, tidak$EMAIL
.