jp3cki / yii2-extra-validator
Yii2 验证器
Requires
- php: >= 8.0
- ext-intl: *
- ext-mbstring: *
- ext-pcre: *
- jp3cki/mb_str_replace: ^4.0.2
- yiisoft/yii2: ^2.0.50
- yiisoft/yii2-httpclient: ^2.0.15
Requires (Dev)
- jp3cki/coding-standard: >=0.1.4
- phpunit/phpunit: >=9.6.19
- proget-hq/phpstan-yii2: ~0.8.0
- squizlabs/php_codesniffer: ^3.10.1
README
要求
- PHP 8.0 或更高版本
- Yii 框架 2.0
- 需要一些 PHP 扩展
- PCRE 扩展(Yii 也需要)
- mbstring 扩展(Yii 也需要)
- intl 扩展(Yii 在某些操作中需要)
安装
- 设置Composer,事实上的标准包管理器。
- 如果需要,设置您的新的Yii应用程序。
php composer.phar require jp3cki/yii2-extra-validator
使用方法
此包包含以下验证器
- AvailableUrlValidator
- ConvertCharacterWidthFilterValidator
- HiraganaValidator
- IdnToPunycodeFilterValidator
- KatakanaValidator
- ReCaptchaValidator
- StrictUrlValidator
- TwitterAccountValidator
- ZenginNameFilterValidator
- ZenginNameValidator
AvailableUrlValidator
AvailableUrlValidator
将检查URL是否可访问。
如果远程服务器返回4xx(客户端错误)或5xx(服务器错误),则验证将失败。
模型类示例
namespace app\models; use yii\base\Model; use jp3cki\yii2\validators\AvailableUrlValidator; // use jp3cki\yii2\validators\StrictUrlValidator; class YourCustomForm extends Model { public $url; public function rules() { return [ [['url'], 'url', 'enableIDN' => true], // <- Core validator // [['url'], StrictUrlValidator::className(), 'enableIDN' => true] [['url'], AvailableUrlValidator::className()], ]; } }
ConvertCharacterWidthFilterValidator
ConvertCharacterWidthFilterValidator
是一个提供字符宽度归一化的过滤器验证器。
此验证器可能对日语输入很有用。
使用此过滤器验证器可以将半角片假名输入转换为全角,或将全角英数字转换为半角英数字,或将片假名转换为平假名。
与HiraganaValidator或KatakanaValidator结合使用可能很方便。
模型类示例
namespace app\models; use yii\base\Model; use jp3cki\yii2\validators\ConvertCharacterWidthFilterValidator; class YourCustomForm extends Model { public $value; public function rules() { return [ [['value'], ConvertCharacterWidthFilterValidator::className(), 'option' => 'asKV', // mb_convert_kana() 関数の変換書式を指定します。デフォルトは asKV です。 'charset' => 'UTF-8', // 必要であれば文字コードを指定します。デフォルトは Yii::app()->charset で、通常 UTF-8 です。 ], ]; } }
HiraganaValidator
HiraganaValidator
验证输入是否仅为平假名字符串。
此验证器检查输入是否仅由平假名组成。可用于姓名的平假名输入等。
要执行片假名验证,请使用KatakanaValidator。
模型类示例
namespace app\models; use yii\base\Model; use jp3cki\yii2\validators\HiraganaValidator; class YourCustomForm extends Model { public $value; public function rules() { return [ [['value'], HiraganaValidator::className(), 'acceptSpace' => false, // スペース(半角・全角)を許容する場合は true を設定します。デフォルトは false です。 'charset' => 'UTF-8', // 必要であれば文字コードを指定します。デフォルトは Yii::app()->charset で、通常 UTF-8 です。 ], ]; } }
IdnToPunycodeFilterValidator
IdnToPunycodeFilterValidator
是一个提供将IDN转换为Punycoded域名名的过滤器验证器。
当您需要将URL存储到使用ASCII字符集的数据库中时,此验证器可能很有用。
模型类示例
namespace app\models; use yii\base\Model; use jp3cki\yii2\validators\IdnToPunycodeFilterValidator; // use jp3cki\yii2\validators\StrictUrlValidator; class YourCustomForm extends Model { public $url; public function rules() { return [ [['url'], 'url', 'enableIDN' => true], // <- Core validator // [['url'], StrictUrlValidator::className(), 'enableIDN' => true] [['url'], IdnToPunycodeFilterValidator::className()], ]; } }
控制器类示例
public function actionUpdate() { $model = new YourCustomForm(); $model->url = 'http://ドメイン名例.JP/'; // user input if ($model->validate()) { // $model->url is now 'http://xn--eckwd4c7cu47r2wf.jp/' // $dbModel->url = $model->url; // $dbModel->save(); } }
KatakanaValidator
KatakanaValidator
验证输入是否仅为片假名字符串。
此验证器检查输入是否仅由片假名组成。可用于姓名的片假名输入等。
要执行平假名验证,请使用HiraganaValidator。
模型类示例
namespace app\models; use yii\base\Model; use jp3cki\yii2\validators\KatakanaValidator; class YourCustomForm extends Model { public $value; public function rules() { return [ [['value'], KatakanaValidator::className(), 'acceptSpace' => false, // スペース(半角・全角)を許容する場合は true を設定します。デフォルトは false です。 'charset' => 'UTF-8', // 必要であれば文字コードを指定します。デフォルトは Yii::app()->charset で、通常 UTF-8 です。 ], ]; } }
ReCaptchaValidator
ReCaptchaValidator
验证reCAPTCHA(API版本2)输入。
首先,您必须访问reCAPTCHA网站并创建您的密钥。
在reCAPTCHA注册后,您可以获取Site key
和Secret key
。
打开@app/config/params.php
文件并添加以下密钥:
<?php return [ 'adminEmail' => 'admin@example.com', 'recaptchaSiteKey' => 'YOUR-SITE-KEY', // <- This! 'recaptchaSecret' => 'YOUR-SECRET-KEY', // <- and this! ];
在HTML输出阶段,您可以使用reCAPTCHA网站上的HTML片段。
在验证阶段,您可以设置$_POST['g-recaptcha-response']
参数到我们的验证器和验证。
<?php namespace app\models; use Yii; use yii\base\Model; use jp3cki\yii2\validators\ReCaptchaValidator; class ReCaptchaForm extends Model { public $recaptcha; public function rules() { return [ [['recaptcha'], ReCaptchaValidator::className(), 'secret' => Yii::$app->params['recaptchaSecret']], // <- set SECRET KEY to the validator ]; } public function attributeLabels() { return [ 'recaptcha' => 'reCAPTCHA', ]; } }
// (in Controller class) public function actionUpdate() { $request = Yii::$app->request; $form = new ReCaptchaForm(); $form->recaptcha = $request->post('g-recaptcha-response'); // <- set g-recptcha-response to the validator if ($form->validate()) { // ok } else { // failed } }
StrictUrlValidator
StrictUrlValidator
验证URL,比核心验证器实现更严格。
模型类示例
namespace app\models; use yii\base\Model; use jp3cki\yii2\validators\StrictUrlValidator; class YourCustomForm extends Model { public $url; public function rules() { return [ [['url'], StrictUrlValidator::className(), 'enableIDN' => true] ]; } }
TwitterAccountValidator
TwitterAccountValidator
验证Twitter的@id
名称(也称为screen name)。
默认情况下,我们的验证器会拒绝黑名单中的账户名称,如提及
。
模型类示例
<?php namespace app\models; use Yii; use yii\base\Model; use jp3cki\yii2\validators\TwitterAccountValidator; class YourCustomForm extends Model { public $screenName; public function rules() { return [ [['screenName'], TwitterAccountValidator::className()], ]; } public function attributeLabels() { return [ 'screenName' => 'Screen Name', ]; } }
目前,我们不支持客户端(JavaScript)验证。
ZenginNameFilterValidator
ZenginNameValidator
如果您处理的是面向日本的银行账户,则这些验证器很有用。
ZenginNameFilterValidator
将输入的字符串转换为(在可自动判断的范围内)全银用字符串。
在实际应用中,可以对账户名称等应用过滤器,并将数据传递给实际验证器 ZenginNameValidator
。
ZenginNameValidator
检查输入的字符串是否为全银用字符串。此验证器不接受全角片假名等,因此可以在输入前通过 ZenginNameFilterValidator
进行辅助。(强制使用半角片假名是不人道的。此外,需要用连字符代替长音等,对于人来说很难彻底遵守)
模型类示例
<?php namespace app\models; use Yii; use yii\base\Model; use jp3cki\yii2\validators\ZenginNameFilterValidator; use jp3cki\yii2\validators\ZenginNameValidator; class YourCustomForm extends Model { public $accountName; // 銀行口座名義 public function rules() { return [ // [['accountName'], 'required'], [['accountName'], ZenginNameFilterValidator::className()], [['accountName'], ZenginNameValidator::className()], // [['accountName'], 'string', 'max' => 30], ]; } public function attributeLabels() { return [ 'accountName' => '銀行口座名義', ]; } }
许可证
The MIT License (MIT)
Copyright (c) 2015-2023 AIZAWA Hina <hina@fetus.jp>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
贡献
欢迎提交补丁和/或报告问题。
- 请为每个问题或功能创建新的分支。(master 分支上不应工作)
- 请编写并运行测试。
$ make test
- 编码风格为 PSR-2。
- 请运行 check-style 进行静态代码分析和编码规则检查。
$ make check-style
- 请运行 check-style 进行静态代码分析和编码规则检查。
- 请整理提交记录。
- 请为每个问题或功能创建新的 pull-request。
- 请关注 Travis-CI 和其他钩子的结果。
- 请用日语或非常简单的英语创建新的 pull-request 或问题。
我强烈希望重写我的糟糕英语。