最稳妥的PHP邮箱校验是filter_var($email, FILTER_VALIDATE_EMAIL),它经长期验证可覆盖合法变体,但仅校验格式不验证真实性;需先trim()处理空格,避免空值、null或纯空白符导致误判,且输出时必须用htmlspecialchars()防XSS。
PHP用filter_var()校验邮箱最稳妥
直接用filter_var($email, FILTER_VALIDATE_EMAIL),别自己写正则。PHP内置过滤器经过长期验证,能覆盖[email protected]、带Unicode域名(需额外处理)等合法变体,而手写正则容易漏掉边界情况,比如连字符在域名开头、多余点号、或忽略国际化域名(IDN)的编码要求。
注意:filter_var()只校验格式,不检查邮箱是否真实存在或可送达。它返回false表示格式非法,否则返回原字符串(不是布尔值)。
- 空字符串、
null、仅空白符都会返回false - 如果表单字段名是
email,建议先用trim($_POST['email'] ?? '')再校验,避免前后空格干扰 - 不要用
empty()代替校验——[email protected]是合法邮箱,但empty('[email protected]')为true
表单提交后立即校验,别依赖前端JavaScript
前端type="email"或JS校验只是体验优化,完全不可信。用户禁用JS、用curl/postman直发请求、或改写HTML都能绕过。PHP后端必须独立执行校验逻辑。
典型错误写法:if ($_POST['email'] && !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { /* 错!没处理空值 */ }——这里$_POST['email']为空时条件直接跳过,导致空邮箱被当作有效。
立即学习“PHP免费学习笔记(深入)”;