Это мой код.
function emailField($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); }
а также
if(emailField($_POST['email'])=='') { echo "Invalid email"; } else { echo "Valid"; }
Это позволяет использовать все специальные символы. Я хочу разрешить только подчеркивание, дефис и точку. Как избежать?
Используйте RegEx следующим образом:
/^[\w\.]+@/
Затем вы также должны проверить, действительно ли домен существует.
PHP:
$regex = "/^[\w\.]+@/"; $email = emailField($_POST['email']); $domain = preg_replace($regex, '', $email); //get the domain of the email address by removing the local-part //Using checkdnsrr we are checking if this domain is registred if($email == '' && preg_match($regex, $email) && checkdnsrr($domain)){ echo "Valid"; }
Используйте как сложную проверку filter_var
и простую проверку preg_match
.
function validate_email_popularly($email) { return filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/\A[\w.-]*+@[\w.-]*+\z/', $email) ; }
Вы также должны использовать filter_input
вместо $_POST
. Эта функция может фильтроваться неожиданно. Уведомление: Неопределенный индекс или Array
в False
.
$email = filter_input(INPUT_POST, 'email'); echo validate_email_popularly($email) ? 'Valid' : 'Invalid';