Anda dapat menggunakan filter_var()
fungsi tersebut, yang memberi Anda banyak opsi validasi dan sanitasi yang praktis.
filter_var($email, FILTER_VALIDATE_EMAIL)
Jika Anda tidak ingin mengubah kode yang mengandalkan fungsi Anda, lakukan saja:
function isValidEmail($email){
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
Catatan : Untuk penggunaan lain (di mana Anda memerlukan Regex), ereg
keluarga fungsi yang tidak digunakan lagi (Fungsi Regex POSIX) harus diganti dengan preg
keluarga ( Fungsi Regex PCRE ). Ada sedikit perbedaan, membaca Manual sudah cukup.
Pembaruan 1 : Seperti yang ditunjukkan oleh @binaryLV :
PHP 5.3.3 dan 5.2.14 memiliki bug yang terkait dengan FILTER_VALIDATE_EMAIL, yang mengakibatkan segfault saat memvalidasi nilai besar. Solusi sederhana dan aman untuk ini digunakan strlen()
sebelumnya filter_var()
. Saya tidak yakin tentang 5.3.4 final, tetapi ada tertulis bahwa beberapa versi snapshot 5.3.4 juga terpengaruh.
Bug ini telah diperbaiki.
Pembaruan 2 : Metode ini tentu saja akan divalidasi bazmega@kapa
sebagai alamat email yang valid, karena sebenarnya itu adalah alamat email yang valid. Tetapi sebagian besar waktu di Internet, Anda juga ingin alamat email untuk memiliki TLD: bazmega@kapa.com
. Seperti yang disarankan dalam posting blog ini (tautan diposting oleh @Istiaque Ahmed ), Anda dapat menambahkan filter_var()
dengan regex yang akan memeriksa keberadaan titik di bagian domain (meskipun tidak akan memeriksa TLD yang valid ):
function isValidEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL)
&& preg_match('/@.+\./', $email);
}
Seperti yang ditunjukkan oleh @Eliseo Ocampos , masalah ini hanya ada sebelum PHP 5.3, di versi itu mereka mengubah regex dan sekarang melakukan pemeriksaan ini, jadi Anda tidak perlu melakukannya.
eregi
merupakan fungsi dari) tidak digunakan lagi. Gunakan PCRE sebagai gantinya.