PHP Validasi email menggunakan filter_validate_email dan regex

Programming

oleh Vinci terakhir diubah pada 22 Agustus 2022.

Validasi email dalam PHP dapat dilakukan dengan beberapa cara. Umumnya, sebuah situs web memiliki validasi sisi klien.

Saya lebih suka validasi sisi klien dan server. Ini tidak hanya berlaku untuk email tetapi juga untuk semua masukan yang diterima dari pengguna akhir. Itu membuat situs web lebih kuat.

Validasi email atau input pengguna lainnya merupakan langkah pencegahan penting sebelum diproses.

Pada artikel ini, kita akan melihat cara memverifikasi email di sisi server. PHP menyediakan berbagai alternatif untuk validasi email dengan fungsi dan konstanta bawaannya. Beberapa di antaranya adalah sebagai berikut.

Cara memvalidasi email di PHP

  1. Menggunakan FILTER_VALIDATE_EMAIL.
  2. Menggunakan pencocokan pola ekspresi reguler.
  3. Dengan memvalidasi nama domain dari alamat email.

Contoh singkat berikut menggunakan filter PHP FILTER_VALIDATE_EMAIL. Dia Cara terbaik untuk memvalidasi email di PHP.

Contoh cepat

<?php
$email="test@example.com";
isValidEmail($email);

// using FILTER_VALIDATE_EMAIL - this is the best option to use in PHP
function isValidEmail($email)
{
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
?>

php memvalidasi email

Mari kita lihat beberapa cara lain untuk memvalidasi email menggunakan skrip PHP.

Gunakan FILTER_SANITIZE_EMAIL untuk membersihkan masukan

FILTER_SANITIZE_EMAIL digunakan untuk menghapus data email yang dikirim oleh pengguna.

Dalam contoh ini, $email dikodekan dengan alamat email sampel. Anda dapat memberikan input email dari data formulir yang dikirimkan ke PHP menggunakan metode GET atau POST.

Itu menambahkan langkah sebelumnya untuk menghapus data email sebelum memvalidasi formatnya. Menggunakan FILTER_VALIDATE_EMAIL untuk memvalidasi format data email yang valid.

filter-sanitize-email.php

<?php
// this script explains the difference between FILTER_SANITIZE_EMAIL and FILTER_VALIDATE_EMAIL

// validation is to test if an email is in valid email format and FILTER_VALIDATE_EMAIL should be used.
// sanitization is to clean an user input before using it in the program and FILTER_SANITIZE_EMAIL should be used.
$email = "test@example.com";
$cleanEmail = filter_var($email, FILTER_SANITIZE_EMAIL);

// after sanitization use the email and check for valid email or not
if (filter_var($cleanEmail, FILTER_VALIDATE_EMAIL)) {
    // the email is valid and use it
}
?>

Menggunakan pencocokan pola ekspresi reguler

Jika Anda mengharapkan pola regex untuk memvalidasi format email, kode contoh ini akan membantu.

Kode ini berisi pola regex dalam variabel dan digunakan untuk memvalidasi email dengan PHP preg_match().

Di PHP, preg_match() digunakan untuk mencocokkan pola dengan subjek, di sini alamat email.

Kode ini memiliki fungsi validasiWithRegex() untuk menangani validasi email PHP. berlaku, mengonversi string email input menjadi huruf kecil dan memotongnya sebelum menerapkan preg_match().

Kemudian, jika ditemukan kecocokan untuk pola regex email, itu akan mengembalikan nilai boolean true.

email-regex.php

<?php
validateWithRegex($email);

// Using regular expression (regex). If for some reason you want to validate email via a regex use this
// function. The best way to validate is via FILTER_VALIDATE_EMAIL only.
function validateWithRegex($email)
{
    $email = trim(strtolower($email));

    // the regex I have used is from PHP version 8.1.7 which is used in php_filter_validate_email
    // reference: https://github.com/php/php-src/blob/PHP-8.1.7/ext/filter/logical_filters.c#L682
    $emailRegex = '/^(?!(?:(?:\\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\\pL\\pN]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F\\pL\\pN]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E\\pL\\pN]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F\\pL\\pN]|(?:\\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}))\\]))$/iDu';
    if (preg_match($emailRegex, $email) === 1) {
        return true;
    } else {
        return false;
    }
}
?>

Dengan memvalidasi nama domain dari string email

Metode validasi email ini sangat sederhana. Ini memverifikasi email dengan memverifikasi validitas DNS host-nya.

Ini menggunakan fungsi PHP checkdnsrr() untuk memvalidasi DNS terhadap nama host atau alamat IP situs.

Fungsi ini mengembalikan boolean true jika host telah menemukan catatan DNS. Dan dengan demikian, email di host tersebut dapat dianggap dalam format yang valid.

Daftar langkah-langkah berikut di bawah ini.

  1. Ekstrak nama domain dari email.
  2. Ekstrak awalan nama pengguna sebelum simbol @.
  3. Ini memastikan bahwa nama pengguna dan nama domain tidak kosong.
  4. Memeriksa apakah detail DNS tentang host yang diekstrak dari email masuk tidak kosong.

domain-validasi-email.php

<?php

// simplest custom email validation using email's domain validation
function validateEmail($email)
{
    $isEmailValid = FALSE;

    if (! empty($email)) {
        $domain = ltrim(stristr($email, '@'), '@') . '.';
        $user = stristr($email, '@', TRUE);

        // validate email's domain using DNS
        if (! empty($user) && ! empty($domain) && checkdnsrr($domain)) {
            $isEmailValid = TRUE;
        }
    }
    return $isEmailValid;
}
?>

Unduh

Kembali ke atas


Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.