- implode: documentation ( source)
- str_replace: documentation ( source)
- explode: documentation ( source)
- mb_eregi: documentation ( source)
<?php
$local = 'johnsnow123@ヒキワリ.ナットウ.ニホン';
$localAndDomain = explode('@', $email);
if (count($localAndDomain) !== 2) {
echo 'invalid';
}
$local = $localAndDomain[0];
$localExpression = '^[a-z0-9_-]+(?:[a-z0-9._%+-]+)*$';
if (mb_eregi($localExpression, $local) === false) {
echo 'invalid';
}
// Handle IDN domains
$domain = $localAndDomain[1];
$domain = str_replace('xn--', '', idn_to_ascii($domain));
$dictionary = Helper::$VALID_DOMAINS;
$domainExpression = '^(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+(?:[A-Z]{2}|' . implode('|', $dictionary) . ')$';
if (mb_eregi($domainExpression, $domain) === false) {
echo 'invalid';
}
echo 'valid';