Как ограничить специальные символы, кроме подчеркивания, дефиса и точки в поле электронной почты в PHP?

Это мой код.

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"; } 

См. Также: http://php.net/manual/en/function.checkdnsrr.php

Используйте как сложную проверку 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';