[Tut] PHP Validate Email using filter_validate_email and regex - Printable Version +- Sick Gaming (https://www.sickgaming.net) +-- Forum: Programming (https://www.sickgaming.net/forum-76.html) +--- Forum: PHP Development (https://www.sickgaming.net/forum-82.html) +--- Thread: [Tut] PHP Validate Email using filter_validate_email and regex (/thread-99843.html) |
[Tut] PHP Validate Email using filter_validate_email and regex - xSicKxBot - 08-23-2022 PHP Validate Email using filter_validate_email and regex <div style="margin: 5px 5% 10px 5%;"><img src="https://www.sickgaming.net/blog/wp-content/uploads/2022/08/php-validate-email-using-filter_validate_email-and-regex.jpg" width="550" height="432" title="" alt="" /></div><div><div class="modified-on" readability="7.1111111111111"> by <a href="https://phppot.com/about/">Vincy</a>. Last modified on August 22nd, 2022.</div> <p>Email validation in PHP can be done in different ways. In general, a website will have <a href="https://phppot.com/jquery/jquery-form-validation-with-tooltip/">client-side validation</a>.</p> <p>I prefer both client and <a href="https://phppot.com/php/php-form-validation/">server-side validation</a>. It is applicable not only for emails but also to all inputs received from the end users. It will make the website more robust.</p> <p>Validating email or other user inputs is a basic precautionary step before processing.</p> <p>In this article, we will see how to validate email on the server-side. PHP provides various alternates to validate email with its built-in constants and functions. Some of them are listed below.</p> <h2>Ways to validate email in PHP</h2> <ol> <li>Using FILTER_VALIDATE_EMAIL.</li> <li>Using pattern matching with regular expression.</li> <li>By validating the domain name from the email address.</li> </ol> <p>The following quick example uses <a href="https://www.php.net/manual/en/filter.filters.validate.php" target="_blank" rel="noopener">PHP filter</a> FILTER_VALIDATE_EMAIL. It is the <strong>best method of validating email in PHP</strong>.</p> <div class="post-section-highlight" readability="35"> <h2>Quick example</h2> <pre class="prettyprint"><code class="language-php"><?php $email = '[email protected]'; 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; } ?> </code></pre> </div> <p><img loading="lazy" class="alignnone size-large wp-image-19057" src="https://phppot.com/wp-content/uploads/2022/08/php-validate-email-550x432.jpg" alt="php validate email" width="550" height="432" srcset="https://phppot.com/wp-content/uploads/2022/08/php-validate-email-550x432.jpg 550w, https://phppot.com/wp-content/uploads/2022/08/php-validate-email-300x235.jpg 300w, https://phppot.com/wp-content/uploads/2022/08/php-validate-email-768x603.jpg 768w, https://phppot.com/wp-content/uploads/2022/08/php-validate-email.jpg 803w" sizes="(max-width: 550px) 100vw, 550px"></p> <p>Let us see other methods to validate email using PHP script.</p> <h2>Using FILTER_SANITIZE_EMAIL for input sanitization</h2> <p>The FILTER_SANITIZE_EMAIL is used to clean the email data submitted by the user.</p> <p>In this example, the $email is hard coded with an example email address. You can supply email input from the form data posted to PHP using <a href="https://phppot.com/php/php-request-methods/">GET or POST methods</a>.</p> <p>It adds a prior step to sanitize the email data before validating its format. For validating the format of the sanitized email data, it uses FILTER_VALIDATE_EMAIL.</p> <p class="code-heading">filter-sanitize-email.php</p> <pre class="prettyprint"><code class="language-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 = "[email protected]"; $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 } ?> </code></pre> <h2>Using pattern matching with regular expression</h2> <p>If you are expecting a regex pattern to validate the email format, this example code will help.</p> <p>This code has a regex pattern in a variable and is used to validate email with PHP preg_match().</p> <p>In PHP, the preg_match() is for pattern matching with a given subject that is an email address here.</p> <p>This code has the validateWithRegex() function to process the PHP email validation. It applies converts the input email string to lower case and trims before applying preg_match().</p> <p>Then, it returns a boolean true if the match is found for the email regex pattern.</p> <p class="code-heading">email-regex.php</p> <pre class="prettyprint"><code class="language-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; } } ?> </code></pre> <h2>By validating the domain name from the email string</h2> <p>This method is a very simple one for validating email. It validates email by ensuring its host DNS validness.</p> <p>It uses the PHP checkdnsrr() function to validate DNS by a hostname or the <a href="https://phppot.com/php/how-to-get-the-client-user-ip-address-in-php/">site IP address</a>.</p> <p>This function returns a boolean true if the host has any DNS records found. And thereby, the email in that host can be considered in a valid format.</p> <p>It follows the below list of steps.</p> <ol> <li>It extracts the domain name from the email.</li> <li>It extracts the username prefixed before the @ symbol.</li> <li>It ensures that the username and domain name are not empty.</li> <li>It checks if the DNS details are not empty about the host extracted from the input email.</li> </ol> <p class="code-heading">domain-validate-email.php</p> <pre class="prettyprint"><code class="language-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; } ?> </code></pre> <p><a class="download" href="https://phppot.com/downloads/php/php-validate-email.zip">Download</a></p> <p> <!-- #comments --> </p> <div class="related-articles"> <h2>Popular Articles</h2> </p></div> <p> <a href="https://phppot.com/php/php-validate-email/#top" class="top">↑ Back to Top</a> </p> </div> https://www.sickgaming.net/blog/2022/08/22/php-validate-email-using-filter_validate_email-and-regex/ |