s-bhojani/validation

来自 https://github.com/Respect/Validation 的分支

0.5.0 2013-12-10 02:50 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:15:25 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

PHP 有史以来最出色的验证引擎。

  • 复杂的(自定义)规则变得简单:v::numeric()->positive()->between(1, 256)->validate($myNumber)
  • 出色的(可自定义、可迭代)异常。
  • 80(完全测试)验证器。

安装

PEARComposer 上有可用包。自动加载与 PSR-0 兼容。

特性指南

命名空间导入

Respect\Validation 是命名空间化的,但您可以通过将单个类导入到上下文中来简化操作

use Respect\Validation\Validator as v;

简单验证

Hello World 验证器可能如下所示

$number = 123;
v::numeric()->validate($number); //true

链式验证

可以链式使用验证器。以下示例验证包含数字和字母的字符串,没有空格且长度在1到15之间。

$usernameValidator = v::alnum()->noWhitespace()->length(1,15);
$usernameValidator->validate('alganet'); //true

验证对象属性

给定这个简单的对象

$user = new stdClass;
$user->name = 'Alexandre';
$user->birthdate = '1987-07-01';

可以在单个链中验证其属性

$userValidator = v::attribute('name', v::string()->length(1,32))
                  ->attribute('birthdate', v::date()->minimumAge(18));

$userValidator->validate($user); //true

使用 v::key() 也可以验证数组键

注意,我们在验证器的开头使用了 v::string()v::date()。虽然不是强制的,但使用验证对象的类型作为链中的第一个节点是一种好的做法。

输入可选

所有验证器都将输入视为可选的,并将接受空字符串输入作为有效值,除非文档中另有说明。

我们使用前缀 v:notEmpty() 验证器来禁止空输入,从而将字段定义为必填项,因为需要输入或验证将失败。

v::string()->notEmpty()->validate(''); //false input required

否定规则

您可以使用 v::not() 来否定任何规则

v::not(v::int())->validate(10); //false, input must not be integer

验证器重用

一旦创建,您可以在任何地方重用您的验证器。还记得 $usernameValidator 吗?

$usernameValidator->validate('respect');            //true
$usernameValidator->validate('alexandre gaigalas'); //false
$usernameValidator->validate('#$%');                //false

信息性异常

当发生错误时,验证可以确切地告诉您正在发生什么。为此,我们使用 assert() 方法而不是 validate()

try {
    $usernameValidator->assert('really messed up screen#name');
} catch(\InvalidArgumentException $e) {
   echo $e->getFullMessage();
}

打印的消息正是这样的文本树

\-All of the 3 required rules must pass
  |-"really messed up screen#name" must contain only letters (a-z) and digits (0-9)
  |-"really messed up screen#name" must not contain whitespace
  \-"really messed up screen#name" must have a length between 1 and 15

获取消息

文本树很好,但在 HTML 表单或更定制的场景中不可用。您可以使用 findMessages() 来获取消息

try {
    $usernameValidator->assert('really messed up screen#name');
} catch(\InvalidArgumentException $e) {
    var_dump($e->findMessages(array('alnum', 'length', 'noWhitespace')));
}

findMessages() 返回一个包含请求验证器消息的数组。

自定义消息

获取消息作为数组很好,但有时您需要自定义它们以将它们呈现给用户。这也可以使用 findMessages() 方法来实现

$errors = $e->findMessages(array(
    'alnum'        => '{{name}} must contain only letters and digits',
    'length'       => '{{name}} must not have more than 15 chars',
    'noWhitespace' => '{{name}} cannot contain spaces'
));

对于所有消息,模板中可用 {{name}}{{input}} 变量。

验证器名称

v::attribute()v::key() 上,{{name}} 是属性/键名。对于其他情况,与输入相同。您可以使用以下方式自定义验证器名称

v::date('Y-m-d')->between('1980-02-02', 'now')->setName('Member Since');

Zend/Symfony 验证器

如果已安装,也可以重用来自其他框架的验证器

$hostnameValidator = v::zend('Hostname')->assert('google.com');
$timeValidator     = v::sf('Time')->assert('22:00:01');

验证方法

我们已经看到了返回 true 或 false 的 validate() 和抛出完整验证报告的 assert()。还有一个 check() 方法,它只返回第一个找到的错误异常

try {
    $usernameValidator->check('really messed up screen#name');
} catch(\InvalidArgumentException $e) {
    echo $e->getMainMessage();
}

消息

"really messed up screen#name" must contain only letters (a-z) and digits (0-9)

参考

类型

  • v::arr()
  • v::bool()
  • v::date()
  • v::float()
  • v::hexa() (已弃用)
  • v::instance()
  • v::int()
  • v::nullValue()
  • v::numeric()
  • v::object()
  • v::string()
  • v::xdigit()

泛型

  • v::call()
  • v::callback()
  • v::not()
  • v::when()
  • v::alwaysValid()
  • 对象::alwaysInvalid()

比较值

  • 对象::between()
  • 对象::equals()
  • 对象::max()
  • 对象::min()

数字

  • 对象::between()
  • v::bool()
  • 对象::even()
  • v::float()
  • v::hexa() (已弃用)
  • v::int()
  • 对象::multiple()
  • 对象::negative()
  • 对象::notEmpty()
  • v::numeric()
  • 对象::odd()
  • 对象::perfectSquare()
  • 对象::positive()
  • 对象::primeNumber()
  • 对象::roman()
  • v::xdigit()

字符串

  • 对象::alnum(string $additionalChars)
  • 对象::alpha()
  • 对象::between()
  • 对象::charset()
  • 对象::consonants() (已弃用)
  • 对象::consonant()
  • 对象::contains()
  • 对象::cntrl()
  • 对象::digits() (已弃用)
  • 对象::digit()
  • 对象::endsWith()
  • 对象::in()
  • 对象::graph()
  • 对象::length()
  • 对象::lowercase()
  • 对象::notEmpty()
  • 对象::noWhitespace()
  • 对象::prnt()
  • 对象::punct()
  • 对象::regex()
  • 对象::slug()
  • 对象::space()
  • 对象::startsWith()
  • 对象::uppercase()
  • 对象::uppercase()
  • 对象::version()
  • 对象::vowels() (已弃用)
  • 对象::vowel()
  • v::xdigit()

数组

  • v::arr()
  • 对象::contains()
  • 对象::each()
  • 对象::endsWith()
  • 对象::in()
  • 对象::key()
  • 对象::length()
  • 对象::notEmpty()
  • 对象::startsWith()

对象

  • 对象::attribute($name)
  • v::instance()
  • 对象::length()

日期和时间

  • 对象::between()
  • v::date()
  • 对象::leapDate()
  • 对象::leapYear()

分组验证器

  • 对象::allOf()
  • 对象::noneOf()
  • 对象::oneOf()

区域

  • 对象::tld()
  • 对象::countryCode()

文件

  • 对象::directory()
  • 对象::exists()
  • 对象::file()
  • 对象::readable()
  • 对象::symbolicLink()
  • 对象::uploaded()
  • 对象::writable()

其他

  • 对象::cnh()
  • 对象::cnpj()
  • 对象::cpf()
  • 对象::domain()
  • 对象::email()
  • 对象::ip()
  • 对象::json()
  • 对象::macAddress()
  • 对象::phone()
  • 对象::sf()
  • 对象::zend()
  • 对象::nfeAccessKey()

按字母顺序

对象::allOf($v1, $v2, $v3...)

如果所有内部验证器都通过,则进行验证。

v::allOf(
    v::int(),
    v::positive()
)->validate(15); //true

这与链(它已经是allOf)类似,但它的语法允许您为每个节点设置自定义名称

v::allOf(
    v::int()->setName('Account Number'),
    v::positive()->setName('Higher Than Zero')
)->setName('Positive integer')
 ->validate(15); //true

另请参阅

  • 对象::oneOf() - 如果至少一个内部规则通过则进行验证
  • 对象::noneOf() - 如果没有内部规则通过则进行验证
  • 对象::when() - 三元验证器

对象::alnum(string $additionalChars)

对象::alnum(string $additionalChars)

验证a-Z和0-9的字母数字字符。

v::alnum()->validate('foo 123'); //true

可以使用额外字符的参数

v::alnum('-')->validate('foo - 123'); //true

此验证器允许空白字符,如果您想删除它们,请将->noWhitespace()添加到链中

v::alnum()->noWhitespace->validate('foo 123'); //false

默认情况下允许空值,如果您想使它们无效,请将->notEmpty()添加到链中

v::alnum()->notEmpty()->validate(''); //false

您可以使用->lowercase()->uppercase()验证器来限制大小写

v::alnum()->uppercase()->validate('aaa'); //false

此验证器的消息模板包含{{additionalChars}}作为参数传递的额外字符字符串。

另请参阅

  • 对象::alpha() - a-Z,空或只包含空白字符
  • 对象::digit() - 0-9,空或只包含空白字符
  • 对象::consonant()
  • 对象::vowel()

对象::alpha()

对象::alpha(string $additionalChars)

这与对象::alnum()类似,但不允许数字。它还接受空值和空白字符,因此当适用时请使用对象::notEmpty()对象::noWhitespace()

另请参阅

  • 对象::alnum() - a-z0-9,空或只包含空白字符
  • 对象::digit() - 0-9,空或只包含空白字符
  • 对象::consonant()
  • 对象::vowel()

v::arr()

验证输入是否为数组或可遍历对象。

v::arr()->validate(array()); //true
v::arr()->validate(new ArrayObject); //true

另请参阅

  • 对象::each() - 验证数组的每个成员
  • 对象::key() - 验证数组的特定键

对象::alwaysValid

始终返回true。

对象::alwaysInvalid

始终返回false。

对象::attribute($name)

对象::attribute($name, 对象 $validator)

对象::attribute($name, 对象 $validator, 布尔值 $mandatory=true)

验证对象属性。

$obj = new stdClass;
$obj->foo = 'bar';

v::attribute('foo')->validate($obj); //true

您还可以验证属性本身

v::attribute('foo', v::equals('bar'))->validate($obj); //true

第三个参数使属性存在是可选的

v::attribute('lorem', v::string(), false)->validate($obj); // true

此验证器的名称自动设置为属性名称。

另请参阅

  • 对象::key() - 验证数组的特定键

对象::between($start, $end)

对象::between($start, $end, 布尔值 $inclusive=false)

验证范围。最简单的示例

v::int()->between(10, 20)->validate(15); //true

类型是链中的第一个验证器是一种良好的做法,因为between接受许多类型

v::string()->between('a', 'f')->validate('c'); //true

在日期上也非常有用

v::date()->between('2009-01-01', '2013-01-01')->validate('2010-01-01'); //true

日期范围接受strtotime值

v::date()->between('yesterday', 'tomorrow')->validate('now'); //true

可以传递第三个参数来验证传递的值是否包含

v::date()->between(10, 20, true)->validate(20); //true

此验证器的消息模板包括 {{minValue}}{{maxValue}}

另请参阅

  • v::length() - 验证输入的长度
  • 对象::min()
  • 对象::max()

v::bool()

验证输入是否为布尔值

v::bool()->validate(true); //true
v::bool()->validate(false); //true

v::call(callable $callback)

这是一个非常底层的验证器。它对输入调用一个函数、方法或闭包,然后对其进行验证。考虑以下变量

$url = 'http://www.google.com/search?q=respect.github.com'

要验证此URL的每个部分,我们可以使用原生的 parse_url 函数来分解其部分

$parts = parse_url($url);

此函数返回一个包含 schemehostpathquery 的数组。我们可以这样验证它们

v::arr()->key('scheme', v::startsWith('http'))
        ->key('host',   v::domain())
        ->key('path',   v::string())
        ->key('query',  v::notEmpty());

使用 v::call(),您可以一次性完成此操作

v::call(
    'parse_url',
     v::arr()->key('scheme', v::startsWith('http'))
        ->key('host',   v::domain())
        ->key('path',   v::string())
        ->key('query',  v::notEmpty())
)->validate($url);

它可以将方法或闭包作为第一个参数调用

v::call(array($myObj, 'methodName'), v::int())->validate($myInput);
v::call(function($input) {}, v::int())->validate($myInput);

另请参阅

  • v::callback() - 类似,但工作流程不同。

v::callback(callable $callback)

这是一个通配符验证器,它使用函数名、方法或闭包进行验证

v::callback('is_int')->validate(10); //true

(请注意,这是一个示例,v::int() 验证器要好得多)。

v::call() 类似,您可以传递一个方法或闭包给它。

另请参阅

  • v::call() - 一个更复杂的构建块验证器

对象::charset()

验证字符串是否在特定的字符集中。

v::charset('ASCII', 'açúcar'); //false
v::charset('ASCII', 'sugar');  //true
v::charset(array('ISO-8859-1', 'EUC-JP'), '日本国'); // true

数组格式是逻辑或,而不是逻辑与。

对象::cnpj()

验证巴西的CNPJ号码。忽略非数字字符,如果需要,请使用 ->digit()

另请参阅

  • v::cpf() - 验证巴西的CPF号码。
  • v::cnh() - 验证巴西的驾照。

对象::nfeAccessKey()

验证巴西电子发票(NFe)的访问密钥。

对象::consonants() (已弃用)

验证只包含辅音的字符串。现已弃用,请使用 consonant 代替。

另请参阅

  • 对象::consonant()

对象::consonant()

v::consonant(string $additionalChars)

类似于 v::alnum()。验证只包含辅音的字符串

v::consonant()->validate('xkcd'); //true

另请参阅

  • 对象::alnum() - a-z0-9,空或只包含空白字符
  • 对象::digit() - 0-9,空或只包含空白字符
  • 对象::alpha() - a-Z,空或只包含空白字符
  • 对象::vowel()

v::contains($value)

v::contains($value, boolean $identical=false)

对于字符串

v::contains('ipsum')->validate('lorem ipsum'); //true

对于数组

v::contains('ipsum')->validate(array('ipsum', 'lorem')); //true

可以传递第二个参数进行相同比较,而不是相等比较。

此验证器的消息模板包括 {{containsValue}}

另请参阅

  • 对象::startsWith()
  • 对象::endsWith()
  • 对象::in()

v::cntrl

v::cntrl(string $additionalChars)

这与 v::alnum() 类似,但只接受控制字符

v::cntrl()->validate("\n\r\t"); //true

另请参阅

  • 对象::alnum() - a-z0-9,空或只包含空白字符
  • v::prnt() - 所有可打印字符
  • v::space() - 空或只包含空白的

v::countryCode

验证ISO国家代码,如US或BR。

v::countryCode('BR'); //true

另请参阅

  • v::tld() - 验证顶级域名

对象::cnh()

验证巴西的驾照。

v::cnh()->validate('02650306461');

另请参阅

  • 对象::cnpj()
  • 对象::cpf()

对象::cpf()

验证巴西的CPF号码。

v::cpf()->validate('44455566820');

它忽略任何非数字字符

v::cpf()->validate('444.555.668-20');

如果您需要验证数字,请在链中添加 ->digit()

v::digit()->cpf()->validate('44455566820');

另请参阅

  • 对象::cnpj()
  • 对象::cnh()

v::creditCard()

验证信用卡号码。

v::creditCard()->validate($myCredCardNumber);

它忽略任何非数字字符,因此当适当的时候使用 ->digit()

v::digit()->creditCard()->validate($myCredCardNumber);

v::date()

v::date($format)

验证输入是否为日期

v::date()->validate('2009-01-01'); //true

也接受 strtotime 值

v::date()->validate('now'); //true

和 DateTime 实例

v::date()->validate(new DateTime); //true

在验证字符串时,可以传递一个格式

v::date('Y-m-d')->validate('01-01-2009'); //false

当验证 DateTime 实例时,格式没有影响。

此验证器的消息模板包括 {{format}}

另请参阅

  • 对象::between()
  • v::minimumAge()
  • 对象::leapDate()
  • 对象::leapYear()

对象::digits() (已弃用)

验证0-9、空或只包含空白。现已弃用,请使用 digit 代替。

另请参阅

  • 对象::digit()

对象::digit()

这与 v::alnum() 类似,但不允许 a-Z。它也接受空值和空白,因此当适当的时候使用 v::notEmpty()v::noWhitespace()

另请参阅

  • 对象::alnum() - a-z0-9,空或只包含空白字符
  • 对象::alpha() - a-Z,空或只包含空白字符
  • 对象::vowel()
  • 对象::consonant()

对象::domain()

v::domain($checkTLD=true)

验证域名。

v::domain()->validate('google.com');

您可以选择跳过 顶级域名(TLD)检查以验证内部域名

v::domain(false)->validate('dev.machine.local');

这是一个复合验证器,它内部验证多个规则

  • 如果输入是IP地址,则验证。
  • 如果输入包含空格,则失败。
  • 如果输入不包含任何点,则失败。
  • 如果输入有不到两个部分,则失败。
  • 输入必须以顶级域名结尾才能通过(如果未跳过)。
  • 每个部分必须是字母数字的,且不能以连字符开头。
  • PunnyCode 用于 应用程序中的国际化域名

此验证器的消息将反映上述规则。

另请参阅

  • 对象::tld()
  • 对象::ip()

对象::directory()

验证目录。

v::directory()->validate(__DIR__); //true
v::directory()->validate(__FILE__); //false

此验证器将考虑 SplFileInfo 实例,因此您可以进行如下操作

v::directory()->validate(new \SplFileInfo($directory));

另请参阅

  • 对象::exists()
  • 对象::file()

v::each(v $validatorForValue)

v::each(null, v $validatorForKey)

v::each(v $validatorForValue, v $validatorForKey)

遍历数组或迭代器,并验证每个条目的值或键

$releaseDates = array(
    'validation' => '2010-01-01',
    'template'   => '2011-01-01',
    'relational' => '2011-02-05',
);

v::arr()->each(v::date())->validate($releaseDates); //true
v::arr()->each(v::date(), v::string()->lowercase())->validate($releaseDates); //true

each() 之前使用 arr() 是最佳实践。

另请参阅

  • 对象::key()
  • v::arr()

对象::email()

验证电子邮件地址。

v::email()->validate('alexandre@gaigalas.net'); //true

对象::exists()

验证文件或目录。

v::exists()->validate(__FILE__); //true
v::exists()->validate(__DIR__); //true

此验证器将考虑 SplFileInfo 实例,因此您可以进行如下操作

v::exists()->validate(new \SplFileInfo($file));

另请参阅

  • 对象::directory()
  • 对象::file()

v::endsWith($value)

v::endsWith($value, boolean $identical=false)

此验证器类似于 v::contains(),但仅验证值是否在输入的末尾。

对于字符串

v::endsWith('ipsum')->validate('lorem ipsum'); //true

对于数组

v::endsWith('ipsum')->validate(array('lorem', 'ipsum')); //true

可以传递第二个参数进行相同比较,而不是相等比较。

此验证器的消息模板包含 {{endValue}}

另请参阅

  • 对象::startsWith()
  • 对象::contains()
  • 对象::in()

v::equals($value)

v::equals($value, boolean $identical=false)

验证输入是否等于某些值。

v::equals('alganet')->validate('alganet'); //true

相同的验证 (===) 是可能的

v::equals(10)->validate('10'); //true
v::equals(10, true)->validate('10'); //false

此验证器的消息模板包含 {{compareTo}}

另请参阅

  • 对象::contains()

对象::even()

验证偶数。

v::int()->even()->validate(2); //true

even() 之前使用 int() 是最佳实践。

另请参阅

  • 对象::odd()
  • 对象::multiple()

对象::file()

验证文件。

v::file()->validate(__FILE__); //true
v::file()->validate(__DIR__); //false

此验证器将考虑 SplFileInfo 实例,因此您可以进行如下操作

v::file()->validate(new \SplFileInfo($file));

另请参阅

  • 对象::directory()
  • 对象::exists()

v::float()

验证浮点数。

v::float()->validate(1.5); //true
v::float()->validate('1e5'); //true

对象::graph()

v::graph(string $additionalChars)

验证所有以图形方式表示的字符。

v::graph()->validate('LKM@#$%4;'); //true

另请参阅

  • 对象::prnt()

v::hexa() (已弃用)

验证十六进制数。现在已弃用,应使用 xdigit 代替。

v::hexa()->validate('AF12'); //true

另请参阅

  • v::xdigit()

v::in($haystack)

v::in($haystack, boolean $identical=false)

验证输入是否包含在特定的 hay stack 中。

对于字符串

v::in('lorem ipsum')->validate('ipsum'); //true

对于数组

v::in(array('lorem', 'ipsum'))->validate('lorem'); //true

可以传递第二个参数进行相同比较,而不是相等比较。

此验证器的消息模板包含 {{haystack}}

另请参阅

  • 对象::startsWith()
  • 对象::endsWith()
  • 对象::contains()

v::instance($instanceName)

验证输入是否是给定类或接口的实例。

v::instance('DateTime')->validate(new DateTime); //true
v::instance('Traversable')->validate(new ArrayObject); //true

此验证器的消息模板包含 {{instanceName}}

另请参阅

  • v::object()

v::int()

验证输入是否为整数。

v::int()->validate('10'); //true
v::int()->validate(10); //true

另请参阅

  • v::numeric()
  • 对象::digit()

对象::ip()

v::ip($options)

验证 IP 地址。此验证器使用本机 filter_var() PHP 函数。

v::ip()->validate('192.168.0.1');

您可以为 IP 传递带有 filter_var 标志的参数。

v::ip(FILTER_FLAG_NO_PRIV_RANGE)->validate('127.0.0.1'); //false

对象::json()

验证给定的输入是否是有效的 JSON。

v::json->validate('{"foo":"bar"}'); //true

v::key($name)

v::key($name, v $validator)

v::key($name, v $validator, boolean $mandatory=true)

验证数组键。

$dict = array(
    'foo' => 'bar'
);

v::key('foo')->validate($dict); //true

您还可以验证键值本身

v::key('foo', v::equals('bar'))->validate($dict); //true

第三个参数使键的存在性可选

v::key('lorem', v::string(), false)->validate($dict); // true

此验证器的名称自动设置为键的名称。

另请参阅

  • v::attribute() - 验证对象的特定属性

v::leapDate($format)

验证日期是否是闰年。

v::leapDate('Y-m-d')->validate('1988-02-29'); //true

此验证器也接受 DateTime 实例。$format 参数是必需的。

另请参阅

  • v::date()
  • 对象::leapYear()

对象::leapYear()

验证年份是否是闰年。

v::leapYear()->validate('1988'); //true

此验证器也接受 DateTime 实例。

另请参阅

  • v::date()
  • 对象::leapDate()

v::length($min, $max)

v::length($min, null)

v::length(null, $max)

v::length($min, $max, boolean $inclusive=false)

验证长度。最简单的示例

v::string()->length(1, 5)->validate('abc'); //true

您还可以仅验证最小长度

v::string()->length(5, null)->validate('abcdef'); // true

仅验证最大长度

v::string()->length(null, 5)->validate('abc'); // true

将类型作为链中的第一个验证器是最佳实践,因为长度接受许多类型

v::arr()->length(1, 5)->validate(array('foo', 'bar')); //true

可以传递第三个参数来验证传递的值是否包含

v::string()->length(1, 5, true)->validate('a'); //true

此验证器的消息模板包括 {{minValue}}{{maxValue}}

另请参阅

  • v::between() - 验证范围

对象::lowercase()

验证输入中的字符串字符是否为小写

v::string()->lowercase()->validate('xkcd'); //true

另请参阅

  • 对象::uppercase()

对象::macAddress()

验证 Mac 地址。

v::macAddress()->validate('00:11:22:33:44:55'); //true

对象::max()

v::max(boolean $inclusive=false)

验证输入是否不超过最大值。

v::int()->max(15)->validate(20); //false

也接受日期

v::date()->max('2012-01-01')->validate('2010-01-01'); //true

true 作为参数传递以指示必须使用包含值。

此验证器的消息模板包含 {{maxValue}}

另请参阅

  • 对象::min()
  • 对象::between()

对象::min()

v::min(boolean $inclusive=false)

验证输入是否不超过最小值。

v::int()->min(15)->validate(5); //false

也接受日期

v::date()->min('2012-01-01')->validate('2015-01-01'); //true

true 作为参数传递以指示必须使用包含值。

此验证器的消息模板包含 {{minValue}}

另请参阅

  • 对象::max()
  • 对象::between()

v::minimumAge($age)

验证给定日期的最小年龄。

v::date()->minimumAge(18)->validate('1987-01-01'); //true

在使用date()之前是一个最佳实践。

此验证器的消息模板包括{{age}}

另请参阅

  • v::date()

v::multiple($multipleOf)

验证输入是否是给定参数的倍数。

v::int()->multiple(3)->validate(9); //true

另请参阅

  • 对象::primeNumber()

对象::negative()

验证一个数字是否小于零。

v::numeric()->negative()->validate(-15); //true

另请参阅

  • 对象::positive()

对象::noWhitespace()

验证一个字符串是否不包含空白(空格、制表符和换行符);

v::noWhitespace()->validate('foo bar');  //false
v::noWhitespace()->validate("foo\nbar"); //false

与其他规则一样,输入仍然是可选的。

v::string()->noWhitespace()->validate('');  //true
v::string()->noWhitespace()->validate(' '); //false

这在与其他验证器(如v::alnum())链接时最有用。

v::noneOf($v1, $v2, $v3...)

验证给定验证器中没有一个验证通过。

v::noneOf(
    v::int(),
    v::float()
)->validate('foo'); //true

在上面的示例中,'foo'既不是整数也不是浮点数,所以noneOf返回true。

另请参阅

  • v::not()
  • 对象::allOf()
  • 对象::oneOf()

v::not(v $negatedValidator)

否定任何规则。

v::not(v::ip())->validate('foo'); //true

使用快捷方式

v::ip()->not()->validate('foo'); //true

在上面的示例中,验证器返回true,因为'foo'不是一个IP地址。

您也可以否定复杂、分组或链式验证器。

v::not(v::int()->positive())->validate(-1.5); //true

使用快捷方式

v::int()->positive()->not()->validate(-1.5); //true

每个其他验证器都有否定规则的定制消息。

另请参阅

  • 对象::noneOf()

对象::notEmpty()

验证给定输入是否为空或不为空,换句话说,是否输入是强制性的。此函数还考虑空白,如果希望在输入中没有任何空格或换行符和其他空白,请使用noWhitespace()

v::string()->notEmpty()->validate(''); //false

空值是空的

v::notEmpty()->validate(null); //false

数字

v::int()->notEmpty()->validate(0); //false

空数组

v::arr()->notEmpty()->validate(array()); //false

空白

v::string()->notEmpty()->validate('        ');  //false
v::string()->notEmpty()->validate("\t \n \r");  //false

另请参阅

  • 对象::noWhitespace()
  • v::nullValue()

v::nullValue()

验证输入是否为null。此规则不允许空字符串以避免歧义。

v::nullValue()->validate(null); //true

另请参阅

  • 对象::notEmpty()

v::numeric()

验证任何数值。

v::numeric()->validate(-12); //true
v::numeric()->validate('135.0'); //true

另请参阅

  • v::int()
  • 对象::digit()

v::object()

验证输入是否是对象。

v::object()->validate(new stdClass); //true

另请参阅

  • v::instance()
  • 对象::attribute($name)

对象::odd()

验证奇数。

v::int()->odd()->validate(3); //true

在使用odd()之前使用int()是一个最佳实践。

另请参阅

  • 对象::even()
  • 对象::multiple()

v::oneOf($v1, $v2, $v3...)

这是一个组验证器,充当OR运算符。

v::oneOf(
    v::int(),
    v::float()
)->validate(15.5); //true

在上面的示例中,v::int()没有验证,但v::float()验证了,所以oneOf返回true。

v::oneOf在至少一个内部验证器通过时返回true。

使用快捷方式

v::int()->addOr(v::float())->validate(15.5); //true

另请参阅

  • v::allOf() - 与oneOf类似,但充当AND运算符
  • v::noneOf() - 验证内部规则中没有一个验证通过
  • v::when() - 三元验证器

对象::perfectSquare()

验证一个完全平方数。

v::perfectSquare()->validate(25); //true (5*5)
v::perfectSquare()->validate(9); //true (3*3)

对象::phone()

验证有效的7、10、11位电话号码(北美、欧洲和大多数亚洲和中东国家的电话号码),支持国家和区域代码(以点、空格或破折号表示),例如

(555)555-5555
555 555 5555
+5(555)555.5555
33(1)22 22 22 22
+33(1)22 22 22 22
+33(020)7777 7777
03-6106666

对象::positive()

验证一个数字是否大于零

v::numeric()->positive()->validate(-15); //false

另请参阅

  • 对象::negative()

对象::primeNumber()

验证素数

v::primeNumber()->validate(7); //true

对象::prnt()

v::prnt(string $additionalChars)

类似于v::graph,但接受空白。

v::prnt()->validate('LMKA0$% _123'); //true

另请参阅

  • 对象::graph()

对象::punct()

v::punct(string $additionalChars)

只接受标点符号

v::punct()->validate('&,.;[]'); //true

另请参阅

  • 对象::cntrl()
  • 对象::graph()
  • 对象::prnt()

对象::readable()

验证给定数据是否为存在的文件且可读。

v::readable()->validate('/path/of/a/readable/file'); //true

v::regex($regex)

在输入上评估正则表达式并验证是否匹配

v::regex('/[a-z]/')->validate('a'); //true

此验证器的消息模板包括{{regex}}

对象::roman()

验证罗马数字

v::roman()->validate('IV'); //true

此验证器忽略空值,当适当的时候请使用notEmpty()

v::sf($sfValidator)

在Respect\Validation流中使用Symfony2验证器。消息被保留。

v::sf('Time')->validate('15:00:00');

您必须将Symfony2添加到您的自动加载程序中。

另请参阅

  • 对象::zend()

对象::slug()

验证类似短语的字符串

v::slug()->validate('my-wordpress-title'); //true
v::slug()->validate('my-wordpress--title'); //false
v::slug()->validate('my-wordpress-title-'); //false

对象::space()

v::space(string $additionalChars)

只接受空白

v::space()->validate('    '); //true

另请参阅

  • 对象::cntrl()

v::startsWith($value)

v::startsWith($value, boolean $identical=false)

此验证器类似于v::contains(),但只验证值是否在末尾。

对于字符串

v::startsWith('lorem')->validate('lorem ipsum'); //true

对于数组

v::startsWith('lorem')->validate(array('lorem', 'ipsum')); //true

可以将true作为参数传递,以表示进行相同比较而不是相等比较。

此验证器的消息模板包括{{startValue}}

另请参阅

  • 对象::endsWith()
  • 对象::contains()
  • 对象::in()

v::string()

验证字符串。

v::string()->validate('hi'); //true

另请参阅

  • 对象::alnum(string $additionalChars)

对象::symbolicLink()

验证给定数据是否为有效符号链接的路径。

v::symbolicLink()->validate('/path/of/valid/symbolic/link'); //true

对象::tld()

验证顶级域名

v::tld()->validate('com'); //true
v::tld()->validate('ly'); //true
v::tld()->validate('org'); //true

另请参阅

  • v::domain() - 验证域名
  • v::countryCode() - 验证ISO国家代码

对象::uploaded()

验证给定的数据是否是通过HTTP POST上传的文件。

v::uploaded()->validate('/path/of/an/uploaded/file'); //true

对象::uppercase()

验证输入字符串中的字符是否都是大写。

v::string()->uppercase()->validate('W3C'); //true

另请参阅

  • 对象::lowercase()

对象::version()

使用语义版本控制验证版本号。

v::version()->validate('1.0.0');

对象::vowels() (已弃用)

验证只包含元音字母的字符串。现在已弃用,应使用v::vowel代替。

另请参阅

  • 对象::vowel()

对象::vowel()

类似于v::alnum()。验证只包含元音字母的字符串。

v::vowel()->validate('aei'); //true

另请参阅

  • 对象::alnum() - a-z0-9,空或只包含空白字符
  • 对象::digit() - 0-9,空或只包含空白字符
  • 对象::alpha() - a-Z,空或只包含空白字符
  • 对象::consonant()

v::when(v $if, v $then, v $else)

接受三个参数的三元验证器。

当$if验证通过时,返回$then的验证。当$if未通过验证时,返回$else的验证。

v::when(v::int(), v::positive(), v::notEmpty())->validate($input);

在上面的示例中,如果$input是整数,则它必须是正数。如果$input不是整数,则它不能为空。

另请参阅

  • 对象::allOf()
  • 对象::oneOf()
  • 对象::noneOf()

v::xdigit()

接受十六进制数字。

v::xdigit()->validate('abc123'); //true

然而,请注意,它不接受以0x开头的字符串。

v::xdigit()->validate('0x1f'); //false

另请参阅

  • 对象::digit()
  • 对象::alnum(string $additionalChars)

对象::writable()

验证给定的数据是否是存在的文件并且是可写的。

v::writable()->validate('/path/of/a/writable/file'); //true

v::zend($zendValidator)

在Respect\Validation流程中使用Zend验证器。信息被保留。

v::zend('Hostname')->validate('google.com');

您需要在您的自动加载例程中包含Zend框架。

另请参阅

  • 对象::sf()