Laravel手机号验证用哪个包

wen PHP项目 2

本文目录导读:

Laravel手机号验证用哪个包

  1. overtrue/laravel-phone(推荐,支持国际手机号)
  2. overtrue/easy-phone(轻量级,适合国内用户)
  3. 原生正则验证(最简单,适合简单场景)
  4. 总结建议

在 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 等)发送验证码进行二次确认。

抱歉,评论功能暂时关闭!