originphp / validation
OriginPHP 验证
Requires
- php: >=7.3.0
Requires (Dev)
- phpstan/phpstan: ^0.12.64
- phpunit/phpunit: ^9.2
README
该库提供了一个 Validation
库和 Validator
类,用于在数据数组上设置和运行验证规则。
安装
要安装此包
$ composer require originphp/validation
验证库
例如
$bool = Validation::ip('192.168.1.25');
以下为验证规则的完整列表,在下一节之后。
验证器
要验证一组值
$validator = new Validator(); $validator->add('name','required') ->add('email',[ 'optional', // rule name 'email' => [ 'rule' => 'email' // rule name 'message' => 'Invalid email address' // custom message ] ]); $errors = $validator->validate($_POST);
规则选项
- rule: 规则名称,数组,可调用函数,例如 required, numeric, ['date', 'Y-m-d'],[$this,'method']
- message: 如果规则失败则显示的错误消息,如果没有提供,将使用默认消息。
- on: 默认为null。设置为 create 或 update 以仅在那些上运行规则,与
validate
的第二个参数一起使用。 - allowEmpty: 默认为false,验证将传递空值。
- stopOnFail: 默认为false,验证失败时是否继续。
您还可以使用自定义验证规则:
$validator->add('first_name', 'uniqueRuleName', [ 'rule' => [new NameAssert(),'firstName'] // [$object,'method'] ]);
或者使用闭包:
$validator->add('status', 'uniqueRuleName', [ 'rule' => function ($value) { return $value === 'active'; } ]);
Validator
使用 Validation
规则,并内置了 3 个额外的验证规则:required
、optional
和 present
。
这些规则应该首先调用,对于 required
和 present
,如果它们失败,则不会运行其他验证规则。
- required: 这意味着键必须
存在
,并且值是notEmpty
- optional: 这意味着数据是可选的,如果值是
empty
,则不会运行更多验证规则。 - present: 这意味着数据数组必须存在键,值是否为空无关紧要。
ValidateTrait
您可以将验证添加到任何普通的旧 PHP 对象。
class Popo { use ValidateTrait; public $name; public $email; public function __construct() { $this->validate('name','required'); $this->validate('email',[ 'required', 'email' ]); } }
然后您可以检查其是否有效
$popo = new Popo(); $popo->name = 'foo'; $popo->email = 'foo@example.com'; if(!$popo->validates()){ $errors = $popo->errors(); }
您还可以
验证规则
accepted
验证值是否被接受(复选框被勾选)
Validation::accepted($_POST['accepted']);
after
验证日期是否在某个日期之后,日期将传递给 strtotime
函数。
Validation::after('2019-01-01','now');
alpha
验证字符串是否只包含默认区域设置的字母字符
Validation::alpha('abc');
alphaNumeric
验证字符串是否只包含默认区域设置的字母数字字符
Validation::alphaNumeric('abc1234');
array
验证值是否为数组
Validation::array([]);
before
验证日期是否在某个日期之前,日期将传递给 strtotime
函数。
Validation::before('2019-01-01','today');
boolean
验证值是否为布尔类型
Validation::boolean(true);
creditCard
验证信用卡号
所有正则表达式规则都是从头开始编写的,使用当前 IIN 范围,因此虽然它们是准确的,但规则还不够成熟。
Validation::creditCard('2222 9909 0525 7051');
date
使用与 PHP DateTime
类兼容的格式验证日期。
Validation::date('2019-01-01'); Validation::date('01/01/2019','d/m/Y');
dateFormat
使用与 PHP DateTime
类兼容的格式验证日期,这用于 Validation::date
、Validation::time
和 Validation::dateTime
。
格式,即第二个参数是必需的
Validation::dateFormat('01/01/2019','d/m/Y');
dateTime
使用与 PHP DateTime 类兼容的格式验证日期时间。
Validation::dateTime('2019-01-01 17:23:00'); Validation::dateTime('01/01/2019 17:23','d/m/Y H:i');
decimal
验证值是否为浮点数。float 的别名
Validation::decimal(0.007); Validation::decimal('0.007');
电子邮件地址验证
Validation::email('foo@example.com');
您还可以使用 getmxrr
函数检查电子邮件地址是否有有效的 MX 记录。
Validation::email('foo@example.com',true);
equalTo
验证值是否等于另一个值,仅比较值。
Validation::equalTo(5,5); Validation::equalTo('5',5);
extension
验证值是否有扩展。如果提供数组,它将查找
Validation::extension('filename.jpg',['jpg','gif']);
您还可以检查已上传的文件是否具有正确的扩展名。
Validation::extension($_FILES['file1'],['jpg','gif']);
浮点数
验证值是否为浮点数。
Validation::float(0.007); Validation::float('0.007');
FQDN
验证字符串是否为完全限定域名(FQDN)。
Validation::fqdn('www.originphp.com');
您还可以使用 checkdnsrr
检查 DNS 记录,以确保其确实有效,而不仅仅是看起来有效。
Validation::fqdn('www.originphp.com',true);
大于
验证值是否大于某个值。
Validation::greaterThan(4,1);
大于等于
验证值是否大于或等于另一个值。
Validation::greaterThanOrEqual(4,1);
十六进制
验证十六进制字符串。
Validation::hex('b1816172fd2ba98f3af520ef572e3a47');
十六进制颜色
验证值是否为十六进制颜色。
Validation::hexColor('#f5f5f5');
IBAN
验证值是否为 IBAN 号码。
Validation::iban('DE89 3704 0044 0532 0130 00');
在...之中
验证值是否在一个列表中。
Validation::in('foo',['foo','bar']);
整数
验证值是否为整数。
Validation::integer('1'); Validation::integer(1);
IP 地址
验证值是否为 IP 地址,默认情况下验证为 IPv4 或 IPv6。
Validation::ip('192.168.1.1');
仅验证 IPv4 或 IPv6
Validation::ip('192.168.1.10','ipv4'); Validation::ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334','ipv6');
IP 范围
验证 IP 地址是否在范围内。
Validation::ipRange('192.168.1.5','192.168.168.1','192.168.1.10');
JSON
验证值是否为 JSON 字符串。
$data = json_encode('foo'); Validation::json($data);
长度
验证字符串具有特定长度。
Validation::length('foo', 3);
小于
验证值是否小于另一个值。
Validation::lessThan(3,5);
小于等于
验证值是否小于或等于另一个值。
Validation::lessThanOrEqual(5,5);
小写
验证字符串是否为小写。
Validation::lowercase('foo');
LUAN 算法
使用 LUAN 算法验证数字。
Validation::luan('7992739871');
MAC 地址
验证字符串是否为有效的 MAC 地址。
Validation::macAddress('00:0b:95:9d:00:17');
最大长度
验证字符串具有最大长度。
Validation::maxLength('foo',3);
MD5
验证字符串是否为 MD5 哈希。
Validation::md5('b1816172fd2ba98f3af520ef572e3a47');
您也可以允许它不区分大小写
Validation::md5('B1816172FD2BA98F3AF520EF572E3A47',true);
媒体类型
验证文件具有特定的媒体类型。
Validation::mimeType('phpunit.xml','text/xml'); Validation::mimeType('import.csv',['text/csv''text/plain']); Validation::mimeType($_FILES['upload1'],'application/pdf');
最小长度
验证字符串具有最小长度。
Validation::minLength('foo',3);
非空
验证值不是空且包含非空白字符。
Validation::notBlank('foo');
非空
验证值不是空,一个值为空
空值
- 空字符串
''
- 空数组
- 空文件上传
Validation::notEmpty('foo');
不在...之中
验证值不在值数组中。
Validation::notIn('fooz',['foo','bar']);
数字
验证值是整数或浮点数。
Validation::numeric('1'); Validation::numeric(1); Validation::numeric(9.99); Validation::numeric('9.99');
存在
验证数组具有键。
$data = ['foo'=>'bar']; Validation::present($data,'foo');
范围
验证数字或浮点数在范围内。
Validation::range(5,1,10); Validation::range('5',1,10);
正则表达式
使用正则表达式模式验证字符串。
Validation::regex('foo','/foo/');
字符串
验证值是否为字符串。
Validation::string('foo);
时间
验证字符串是否为时间。
Validation::time('10:20'); Validation::time('10:20:00','H:i:s');
上传
验证文件上传是否成功。
Validation::upload($_FILES['upload1']); Validation::upload($_FILES['upload1']['error']);
您还可以允许可选文件上传,这意味着如果没有上传文件,那么如果没有错误上传它,则返回 true。
Validation::upload($_FILES['upload1'],true);
大写
验证字符串是否为大写。
Validation::uppercase('FOO');
URL
验证字符串是否为 URL。
Validation::url('www.example.com/q=foo'); Validation::url('http://www.google.com', true);
UUID
验证字符串是否为 UUID。
Validation::uuid('10458466-a809-4e7a-b784-68d78c25d092');
您也可以允许大写
Validation::uuid('86E6E3FC-4924-4B5F-8BCA-E4C07F7CDDF9',true);