本文目录导读:

在 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 等)发送验证码进行二次确认。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播