Bagaimana saya bisa memvalidasi nilai input adalah alamat email yang valid menggunakan php5. Sekarang saya menggunakan kode ini
function isValidEmail($email){
$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
if (eregi($pattern, $email)){
return true;
}
else {
return false;
}
}
tetapi itu menunjukkan kesalahan yang tidak berlaku lagi. Bagaimana saya bisa memperbaiki masalah ini. Tolong bantu aku.
php
regex
validation
email-validation
pelajar
sumber
sumber
eregi
merupakan fungsi dari) tidak digunakan lagi. Gunakan PCRE sebagai gantinya.Jawaban:
Anda dapat menggunakan
filter_var()
fungsi tersebut, yang memberi Anda banyak opsi validasi dan sanitasi yang praktis.PHP Manual filter_var ()
Tersedia dalam PHP> = 5.2.0
Jika Anda tidak ingin mengubah kode yang mengandalkan fungsi Anda, lakukan saja:
Catatan : Untuk penggunaan lain (di mana Anda memerlukan Regex),
ereg
keluarga fungsi yang tidak digunakan lagi (Fungsi Regex POSIX) harus diganti denganpreg
keluarga ( Fungsi Regex PCRE ). Ada sedikit perbedaan, membaca Manual sudah cukup.Pembaruan 1 : Seperti yang ditunjukkan oleh @binaryLV :
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:[email protected]
. Seperti yang disarankan dalam posting blog ini (tautan diposting oleh @Istiaque Ahmed ), Anda dapat menambahkanfilter_var()
dengan regex yang akan memeriksa keberadaan titik di bagian domain (meskipun tidak akan memeriksa TLD yang valid ):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.
sumber
eregi
, sepertinya dia menggunakan PHP 5.3. Tapi ya, penting untuk menyebutkannya (untuk orang lain)).FILTER_VALIDATE_EMAIL
, yang mengakibatkan segfault saat memvalidasi nilai besar. Solusi sederhana dan aman untuk ini digunakanstrlen()
sebelumnyafilter_val()
. Saya tidak yakin tentang 5.3.4 final, tetapi ada tertulis bahwa beberapa versi snapshot 5.3.4 juga terpengaruh.filter_val
ataufilter_var
?Lihat catatan di http://www.php.net/manual/en/function.ereg.php :
sumber
Ini adalah posting lama tetapi saya akan membagikan satu solusi saya karena tidak ada yang menyebutkan di sini satu masalah sebelumnya.
Alamat email baru dapat berisi karakter UTF-8 atau nama domain khusus seperti
.live
,.news
dll.Saya juga menemukan bahwa beberapa alamat email bisa di Cyrilic dan pada semua kasus standar regex atau
filter_var()
akan gagal.Itu sebabnya saya membuat solusi untuk itu:
Fungsi ini berfungsi dengan sempurna untuk semua kasus dan format email.
sumber
Saya selalu menggunakan ini:
sumber
alex@.
maka selalu mengembalikan true di mana itu bukan alamat email yang valid.Jauhi
regex
danfilter_var()
solusi untuk memvalidasi email. Lihat jawaban ini: https://stackoverflow.com/a/42037557/953833sumber
Menggunakan:
sumber
Sebelum validasi Email: Pertama, Anda harus menghapus semua karakter ilegal dari email.
setelah itu validasi alamat email Anda menggunakan
filter_var()
fungsi ini .Misalnya
sumber