s-bhojani / validation
来自 https://github.com/Respect/Validation 的分支
Requires (Dev)
Suggests
- ext-bcmath: *
- ext-mbstring: *
This package is not auto-updated.
Last update: 2024-09-28 16:15:25 UTC
README
- 复杂的(自定义)规则变得简单:
v::numeric()->positive()->between(1, 256)->validate($myNumber)
。 - 出色的(可自定义、可迭代)异常。
-
80(完全测试)验证器。
安装
在 PEAR 和 Composer 上有可用包。自动加载与 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);
此函数返回一个包含 scheme
、host
、path
和 query
的数组。我们可以这样验证它们
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()