本文目录导读:

在 Laravel 中,手机号验证常用的包有以下几个,具体选择取决于你的需求(是否需要国际化支持、是否仅限国内等):
overtrue/laravel-phone(推荐,支持国际手机号)
这是最流行的 Laravel 手机号验证包,基于 giggsey/libphonenumber-for-php(Google 的 libphonenumber 的 PHP 版本)。
安装:
composer require overtrue/laravel-phone
基本使用:
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'phone' => 'required|phone:CN,US', // 指定国家代码(CN中国,US美国)
]);
// 或自动检测国家(需传递带国家代码的手机号,如 +8613800138000)
$validator = Validator::make($request->all(), [
'phone' => 'required|phone:AUTO',
]);
特点:
- 支持全球 200+ 国家手机号格式验证
- 可以指定国家(
phone:CN)或自动检测(phone:AUTO) - 可以验证手机号是否属于某个特定国家
- 底层使用 Google 官方库,验证准确率高
overtrue/easy-phone(轻量级,适合国内用户)
如果主要针对中国大陆手机号,这是一个更轻量的选择(不需要安装大体积的 libphonenumber)。
安装:
composer require overtrue/easy-phone
使用:
use Overtrue\EasyPhone\Phone;
use Overtrue\EasyPhone\PhoneNumber;
$phone = new PhoneNumber('13800138000');
$phone->isValid(); // true
$phone->getLocation(); // "北京"
$phone->getCarrier(); // "中国移动"
Laravel 集成: 可以自定义验证规则:
// 在 AppServiceProvider 的 boot 方法中
Validator::extend('phone', function ($attribute, $value, $parameters, $validator) {
return (new PhoneNumber($value))->isValid();
});
特点:
- 仅支持中国大陆手机号(11位)
- 可以查询归属地和运营商(需更新数据包)
- 体积小,无外部依赖
原生正则验证(最简单,适合简单场景)
如果只是做基本格式验证(国内 11 位手机号),直接用 Laravel 自带的 regex 规则即可:
$request->validate([
'phone' => 'required|regex:/^1[3-9]\d{9}$/'
]);
缺点: 只能验证格式,不能判断真实有效性,也不支持国际号。
总结建议
| 场景 | 推荐包 |
|---|---|
| 需验证多个国家手机号 | overtrue/laravel-phone |
| 仅中国大陆手机号,需归属地 | overtrue/easy-phone |
| 仅简单格式验证 | 原生 regex 规则 |
如果选择 overtrue/laravel-phone,新增验证规则后需要在 config/app.php 中注册服务提供者(Laravel 5.5+ 会自动发现,不需要手动注册)。
# 发布配置文件(可选) php artisan vendor:publish --provider="Overtrue\LaravelPhone\PhoneServiceProvider"
注意: 手机号验证只能判断格式是否正确,无法验证该号码是否真实存在且被使用,如需验证真实有效性,建议结合短信验证码服务(如阿里云 SMS、Twilio 等)发送验证码进行二次确认。