最简单可靠的邮箱校验用 filter_var($email, FILTER_VALIDATE_EMAIL) !== false,它仅做语法验证、避免过度校验;手机号应使用 giggsey/libphonenumber-for-php 按国家解析并验证,而非简单正则。

PHP 用 filter_var 校验邮箱最简单可靠
直接用 PHP 内置的 filter_var + FILTER_VALIDATE_EMAIL,比正则更准、更省心,也避免过度校验(比如拒绝合法但少见的邮箱格式)。它不检查域名是否存在,只做语法验证——这正是表单提交时需要的层级。
常见错误是手动写正则,结果要么太松(放过 user@.com),要么太紧(拒绝 user+tag@example.com 或带 Unicode 的现代邮箱)。
- 正确用法:
filter_var($email, FILTER_VALIDATE_EMAIL) !== false - 注意:返回
false表示无效,返回字符串本身表示有效(不是true) - 别用
empty()包裹结果判断,会把"0@example.com"这类合法邮箱误判为假值
手机号校验不能只靠正则,得按国家/地区分策略
全球手机号格式差异极大,13812345678(中国)、+44 7911 123456(英国)、(555) 123-4567(美国)都合法。Composer 生态里最成熟的是 giggsey/libphonenumber-for-php,它封装了 Google 的 libphonenumber 数据库。
安装后核心流程是:解析 → 格式化 → 验证号码是否真实存在且符合该国规则(比如中国手机号必须 11 位、以 1[3-9] 开头)。
- 安装:
composer require giggsey/libphonenumber-for-php - 关键步骤:
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();,再调用parse()和isValidNumber() - 别跳过
parse()直接验证字符串——没归一化前的格式(如带空格、括号、+号)会导致验证失败 - 如果只要中国手机号,可用正则
/^1[3-9]\d{9}$/快速初筛,但无法识别虚拟运营商号段或新号段,长期维护成本高
Laravel 项目中怎么集成校验逻辑
如果你用 Laravel,别重复造轮子。Laravel 自带的 email 和 regex 规则能覆盖基础场景,但手机号建议封装成自定义验证规则,复用 giggsey/libphonenumber-for-php。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见坑是把手机号验证写在前端 JS 里就认为“安全了”,其实后端必须重验——用户可以绕过 JS 提交任意数据。
- 定义规则:
'phone' => ['required', new \App\Rules\ValidPhoneNumber('CN')] - 规则类里用
$phoneUtil->parse($value, $region),捕获\libphonenumber\NumberParseException - 别把区域码硬编码成
CN,应从输入中提取国际前缀(如+86)自动推断,否则用户填+8613812345678就会失败 - Form Request 中验证时,
validated()返回的数据已是清洗后的,可直接存库或传给短信 SDK
为什么不用 egulias/EmailValidator 这类第三方包
egulias/EmailValidator 功能强(支持 RFC 5322 全量语法),但对绝大多数 Web 表单属于杀鸡用牛刀。它的严格模式会拒绝大量真实存在的邮箱(比如含 IP 字面量或长标签的),反而增加用户流失。
Composer 安装包越多,依赖冲突概率越高。PHP 8.1+ 的 filter_var 已足够应对 99% 场景;真正需要深度校验(如发信前确认邮箱可达性),应该走 SMTP 检查或发送验证码,而不是在表单提交时卡死。
手机号同理,giggsey/libphonenumber-for-php 是事实标准,其他轻量包往往只覆盖部分国家或缺失号段更新——而手机号规则每年都在变。

















