originphp/validation

OriginPHP 验证

2.0.1 2021-07-26 07:13 UTC

This package is auto-updated.

Last update: 2024-09-26 13:45:56 UTC


README

license build coverage

该库提供了一个 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 个额外的验证规则:requiredoptionalpresent

这些规则应该首先调用,对于 requiredpresent,如果它们失败,则不会运行其他验证规则。

  • 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::dateValidation::timeValidation::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');

email

电子邮件地址验证

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);