tapfury / laravel-phone
为Laravel和Lumen添加基于Google的libphonenumber API的验证器。
Requires
- giggsey/libphonenumber-for-php: ^7.0|^8.0
- illuminate/support: ^4.0|^5.0
- illuminate/validation: ^4.0|^5.0
- julien-c/iso3166: ^2.0
Requires (Dev)
- orchestra/testbench: ^2.0|^3.0
- phpunit/phpunit: ^4.0|^5.2
Suggests
- propaganistas/laravel-intl: Adds internationalization functions, including a compatible and fully translated country list API.
README
基于giggsey的PHP端口libphonenumber-for-php和Google的libphonenumber APIlibphonenumber API,为Laravel 4 & 5和Lumen添加电话验证器和格式化器。
安装
运行以下命令安装最新版本的包
composer require propaganistas/laravel-phone
Laravel
在您的应用程序配置中,将服务提供者添加到$providers
数组中(仅限Laravel 5.4或以下版本)
'providers' => [ ... Propaganistas\LaravelPhone\LaravelPhoneServiceProvider::class, ],
在您的语言目录中,为每种语言添加一个额外的语言行以供验证器使用
"phone" => "The :attribute field contains an invalid number.",
Lumen
在bootstrap/app.php
中注册服务提供者
$app->register(Propaganistas\LaravelPhone\LaravelPhoneServiceProvider::class);
验证器
要使用电话验证器验证字段,请在验证规则数组中使用phone
关键字。电话验证器可以以三种方式运行。
-
您可以直接指定符合ISO 3166-1 alpha-2标准的国家代码作为验证器的参数,例如
'phonefield' => 'phone:US,BE',
验证器将检查该号码是否在提供的至少一个国家中有效,因此您可以随意添加尽可能多的国家代码。
-
您没有指定任何参数,但通过插入一个专用的国家输入字段(以ISO 3166-1 alpha-2标准的国家代码键入)来允许最终用户自行提供国家。最简单的方法是安装Laravel-Intl包。确保国家字段的名称与电话字段类似,但以_country结尾以自动发现,或向验证器提供您自定义的国家字段名称作为参数
'phonefield' => 'phone', 'phonefield_country' => 'required_with:phonefield',
'phonefield' => 'phone:custom_country_field', 'custom_country_field' => 'required_with:phonefield',
如果使用Laravel-Intl,则可以使用以下代码片段填充国家选择列表。它将根据您的应用程序区域自动显示翻译后的国家名称
Country::all()
-
您指示验证器使用
AUTO
关键字(以及可选的任何后备国家)来检测号码所属的国家'phonefield' => 'phone:AUTO,US',
验证器将尝试从号码本身中提取国家,然后检查该号码是否对该国家有效。如果无法猜测国家,则将使用提供(如果有)的后备国家进行验证。请注意,只有当电话号码以国际格式(以加号
+
开头,例如+32 ...) 输入时,国家猜测才会起作用。前导双零将不会被正确解析,因为这不是已建立的规则。
要指定数字类型约束,只需将允许的类型追加到参数末尾,例如
'phonefield' => 'phone:US,BE,mobile',
最常见的类型是mobile
和fixed_line
,但您可以使用定义在这里的任何类型这里。
您还可以通过使用LENIENT
参数启用更宽松的验证(例如,不带区号的固定电话)。请注意,此功能与国家自动检测和数字类型验证不兼容,因此请自行承担风险。
'phonefield' => 'phone:LENIENT,US',
格式化器
使用phone()
辅助函数格式电话号码。$country_code
是电话号码所属的国家。
phone($phone_number, $country_code = null, $format = PhoneNumberFormat::INTERNATIONAL)
始终尝试提供$country_code
,以确保正确识别电话号码。如果没有提供$country_code
,则将使用当前应用程序的区域设置作为合理的默认值。$format
参数定义输出格式,是可选的。默认格式为国际格式,但可以是libphonenumber\PhoneNumberFormat
中的任何常量。