PHPValitron教程展示了如何使用Valitron验证包验证PHP值。
$ php -v php -v PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) ...
我们使用PHP版本8.1.2。
立创
Valitron是一个简单、最小且优雅的独立验证库,没有依赖项。
安装
$ composer require vlucas/valitron $ composer require tightenco/collect
我们安装Valitron包和Laravel的集合包。
简单例子
在第一个示例中,我们展示了如何进行非常简单的验证。
<?php require('vendor/autoload.php'); use Valitron\Validator; $validator = new Validator(['name' => 'John Doe']); $validator->rule('required', 'name'); if($validator->validate()) { echo "Validation passed"; } else { $coll = collect($validator->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } }
该示例验证了一个必需的值。
use Valitron\Validator;
我们包括验证器。
$validator = new Validator(['name' => 'John Doe']);
我们创建了Validator
的实例,并向其传递一个要验证的值。
$validator->rule('required', 'name');
我们使用rule
方法指定一个required
规则。
if($validator->validate()) {
使用validate
执行验证。
$coll = collect($validator->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; }
如果验证失败,我们会收到错误并显示出来。
$ php simple.php Validation passed
这是输出。
验证规则
Valitron包含一组预定义的规则,例如required
、email
、min
、max
或网址。
规则可以与|
字符组合。
<?php require('vendor/autoload.php'); use Valitron\Validator; $rules = [ 'required' => ['name', 'email'], 'alphaNum' => 'name', 'integer' => 'age', 'min' => [['age', 1]], 'email' => 'email' ]; $validator = new Validator(['name' => 'John Doe', 'age' => 34]); $validator->rules($rules); if ($validator->validate()) { echo "Validation passed"; } else { $errors = $validator->errors(); foreach ($errors as $arr) { foreach ($arr as $error) { echo $error . "\n"; } }; }
该示例使用了多个验证规则。
$rules = [ 'required' => ['name', 'email'], 'alphaNum' => 'name', 'integer' => 'age', 'min' => [['age', 1]], 'email' => 'email' ];
我们有四个验证规则。name
和email
是必需的。name
必须是字母数字值,age
必须是整数且其最小值为1。最后,email
必须是有效的电子邮件地址。
$ php multiple_rules.php Email is required Email is not a valid email address Name must contain only letters a-z and/or numbers 0-9
示例以三个验证失败结束。
Valitron链式规则
可以通过链接rule
方法来添加规则。
<?php require('vendor/autoload.php'); use Valitron\Validator; $validator = new Validator(['name' => 'John Doe', 'email' => 'johndoe#gmail.com']); $validator->rule('required', 'name')->rule('email', 'email'); if($validator->validate()) { echo "Validation passed"; } else { $coll = collect($validator->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } }
该示例链接了两个规则。
$validator->rule('required', 'name')->rule('email', 'email');
我们通过链接rule
方法添加两个验证规则。
验证日期
日期有四种验证规则:date
、dateFormat
、dateBefore
和dateAfter
。
<?php require('vendor/autoload.php'); use Valitron\Validator; $validator = new Validator(['created_at' => '2019-03-01']); $validator->rule('dateBefore', 'created_at', '2018-10-13'); if ($validator->validate()) { echo "Validation passed"; } else { $coll = collect($validator->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } }
该示例使用dateBefore
规则验证两个日期。
$validator = new Validator(['created_at' => '2019-03-01']); $validator->rule('dateBefore', 'created_at', '2018-10-13');
使用dateBefore
规则,我们验证给定日期是否早于其他日期。
$ php date_before.php Created At must be date before '2018-10-13'
这是输出。
验证IP地址
IP地址使用ip
规则进行验证。
<?php require 'vendor/autoload.php'; use Valitron\Validator; $vals = ['ip1' => '127.0.0.1', 'ip2' => 'FE80:0000:0000:0000:0202:B3FF:FE1E:8329', 'ip3' => 'FE80::0202:B3FF:FE1E:8329', 'ip4' => '0.0.1']; $coll = collect($vals); $coll->each(function ($value, $key) { $validator = new Validator([$key => $value]); $validator->rule('ip', $key); if ($validator->validate()) { echo "Validation passed for $key with $value" . "\n"; } else { $errs = collect($validator->errors()); $messages = $errs->flatten(); foreach ($messages as $message) { echo $message . "\n"; } } });
该示例验证IPv4和IPv6地址。
$ php ipaddress.php Validation passed for ip1 with 127.0.0.1 Validation passed for ip2 with FE80:0000:0000:0000:0202:B3FF:FE1E:8329 Validation passed for ip3 with FE80::0202:B3FF:FE1E:8329 Ip4 is not a valid IP address
这是输出。
自定义消息
我们可以提供自定义验证消息。消息通过message
传递。
<?php require('vendor/autoload.php'); use Valitron\Validator; $validator = new Validator(['name' => '']); $validator->rule('required', 'name')->message('{field} is compulsory')->label("name"); $validator->rule('lengthMin', 'name', 2)->message('{field} must have at least 2 characters') ->label("name"); if($validator->validate()) { echo "Validation passed"; } else { $coll = collect($validator->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } }
该示例添加了自定义消息。
$validator->rule('required', 'name')->message('{field} is compulsory')->label("name");
使用链式方法调用,我们添加自定义验证消息。
$ php custom_message.php name is compulsory name must have at least 2 characters
这是输出。
值的验证子集
值的子集使用subset
规则进行验证。
<?php require('vendor/autoload.php'); use Valitron\Validator; $vals = ['colors' => ['green', 'blue', 'black']]; $validator = new Validator($vals); $validator->rule('subset', 'colors', ['red', 'green', 'blue', 'orange', 'yellow']); if ($validator->validate()) { echo "Validation passed"; } else { $coll = collect($validator->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } }
该示例检查$vals
变量是否包含定义的颜色值子集中的颜色。
验证GET数据
在下面的示例中,我们验证GET数据。
<?php require('vendor/autoload.php'); use Valitron\Validator; $validator = new Validator($_GET); $validator->rule('required', ['name', 'email']); $validator->rule('email', 'email'); if ($validator->validate()) { echo "Validation passed"; } else { $coll = collect($validator->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } }
该示例验证GET请求中的姓名和电子邮件参数。
$validator = new Validator($_GET);
全局$_GET
变量被传递给Validator
。
$ php -S localhost:8000 PHP 7.2.11 Development Server started at Sat Feb 23 17:24:05 2019 Listening on http://localhost:8000 Document root is C:\Users\Jano\Documents\php-progs\valitron Press Ctrl-C to quit.
我们启动内置的网络服务器。
$ curl "localhost:8000/get_data.php?name=John%20Doe&email=john.doe#gmail.com" Email is not a valid email address
我们使用curl
工具创建一个带有两个参数的GET请求。
在本教程中,我们使用Valitron来验证PHP值。
列出所有PHP教程。