PHP Validasi Email menggunakan filter_validate_email dan regex

0
(0)

oleh Vincy. Terakhir diubah pada 22 Agustus 2022.

Validasi email dalam PHP dapat dilakukan dengan berbagai cara. Secara umum, sebuah situs web akan memiliki validasi sisi klien.

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

Memvalidasi email atau input pengguna lainnya adalah langkah pencegahan dasar sebelum diproses.

Pada artikel ini, kita akan melihat cara memvalidasi email di sisi server. PHP menyediakan berbagai alternatif untuk memvalidasi email dengan konstanta dan fungsi bawaannya. beberapa dari mereka terdaftar di bawah ini.

Cara memvalidasi email di PHP

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

Contoh singkat berikut menggunakan filter PHP FILTER_VALIDATE_EMAIL. Ini adalah metode 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 metode lain untuk memvalidasi email menggunakan skrip PHP.

Menggunakan FILTER_SANITIZE_EMAIL untuk sanitasi masukan

FILTER_SANITIZE_EMAIL digunakan untuk membersihkan data email yang dikirimkan oleh pengguna.

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

Itu menambahkan langkah sebelumnya untuk membersihkan data email sebelum memvalidasi formatnya. Untuk memvalidasi format data email yang dibersihkan, ia menggunakan FILTER_VALIDATE_EMAIL.

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 dengan ekspresi reguler

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

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

Di PHP, preg_match() adalah untuk pencocokan pola dengan subjek tertentu yang merupakan alamat email di sini.

Kode ini memiliki fungsi validasiWithRegex() untuk memproses validasi email PHP. Ini berlaku untuk mengubah string email input menjadi huruf kecil dan trim sebelum menerapkan preg_match().

Kemudian, ia mengembalikan boolean true jika kecocokan ditemukan untuk pola regex email.

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 ini sangat sederhana untuk memvalidasi email. Ini memvalidasi email dengan memastikan validitas DNS host-nya.

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

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

Ini mengikuti daftar langkah-langkah di bawah ini.

  1. Itu mengekstrak nama domain dari email.
  2. Itu mengekstrak nama pengguna yang diawali sebelum simbol @.
  3. Ini memastikan bahwa nama pengguna dan nama domain tidak kosong.
  4. Ini memeriksa apakah detail DNS tidak kosong tentang host yang diekstraksi dari email input.

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

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.


Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home/breatgem/widiyanata.com/wp-includes/functions.php on line 4755