ooopener / violin
Violin 是一个易于使用、高度可定制的 PHP 验证器。
Requires
- php: >=5.4
Requires (Dev)
- phpunit/phpunit: ~4.5
- squizlabs/php_codesniffer: 2.1.*
This package is not auto-updated.
Last update: 2024-09-27 04:35:08 UTC
README
从 alexgarrett/violin 分支
Violin 是一个易于使用、高度可定制的 PHP 验证器。
注意:此包正在积极开发中,不建议用于生产。
安装
使用 Composer 进行安装。
{
"require": {
"ooopener/violin": "2.*"
}
}
基本用法
use Violin\Violin;
$v = new Violin;
$v->validate([
'name' => ['billy', 'required'],
'age' => [20, 'required|int']
]);
if($v->passes()) {
echo 'Validation passed, woo!';
} else {
echo '<pre>', var_dump($v->errors()->all()), '</pre>';
}
添加自定义规则
添加自定义规则很简单。如果闭包返回 false,则规则失败。
$v->addRuleMessage('isbanana', 'The {field} field expects "banana", found "{value}" instead.');
$v->addRule('isbanana', function($value, $input, $args) {
return $value === 'banana';
});
$v->validate([
'fruit' => ['apple', 'isbanana']
]);
添加自定义错误消息
您可以添加规则消息或字段消息,以实现完全的灵活性。
添加规则消息
$v->addRuleMessage('required', 'You better fill in the {field} field, or else.');
批量添加规则消息
$v->addRuleMessages([
'required' => 'You better fill in the {field} field, or else.',
'int' => 'The {field} needs to be an integer, but I found {value}.',
]);
添加字段消息
您添加的任何字段消息都会在默认或自定义规则消息之前使用。
$v->addFieldMessage('username', 'required', 'You need to enter a username to sign up.');
批量添加字段消息
$v->addFieldMessages([
'username' => [
'required' => 'You need to enter a username to sign up.'
],
'age' => [
'required' => 'I need your age.',
'int' => 'Your age needs to be an integer.',
]
]);
使用字段别名
字段别名可以帮助您格式化任何错误消息,而无需显示奇怪的字段名称或创建自定义错误。
$v->validate([
'username_box|Username' => ['' => 'required']
]);
// Error output: "Username is required."
扩展 Violin
您可以通过扩展 Violin 类来添加自定义规则、规则消息和字段消息。这样,如果您有任何依赖项(如数据库连接或语言文件),您可以保持类整洁以处理自定义验证。
class MyValidator extends Violin
{
protected $db;
public function __construct(PDO $db)
{
$this->db = $db;
// Add rule message for custom rule method.
$this->addRuleMessage('uniqueUsername', 'That username is taken.');
}
// Custom rule method for checking a unique username in our database.
// Just prepend custom rules with validate_
public function validate_uniqueUsername($value, $input, $args)
{
$user = $this->db->prepare("
SELECT count(*) as count
FROM users
WHERE username = :username
");
$user->execute(['username' => $value]);
if($user->fetchObject()->count) {
return false; // Username exists, so return false.
}
return true;
}
}
// A database connection.
$db = new PDO('mysql:host=127.0.0.1;dbname=website', 'root', 'root');
// Instantiate your custom class with dependencies.
$v = new MyValidator($db);
$v->validate([
'username' => ['billy', 'required|uniqueUsername']
]);
规则
此规则列表仍在进行中。当然,如果您想为基本规则集添加更多内容,您可以随时为项目做出贡献。
alnum
如果值是字母数字。
alnumDash
如果值是字母数字。允许使用破折号和下划线。
alpha
如果值仅包含字母。
alphaDash
如果值仅包含字母。允许使用破折号和下划线。
array
如果值是数组。
between(int, int)
检查值是否在定义的区间内。此检查是包含的,因此 5 在 5 和 10 之间。
bool
如果值是布尔值。
如果值是有效的电子邮件。
int
如果值是整数,包括字符串中的数字。1 和 '1' 都被视为整数。
number
如果值是数字,包括字符串中的数字。
Numeric strings consist of optional sign, any number of digits, optional decimal part and optional exponential part. Thus +0123.45e6 is a valid numeric value. Hexadecimal (e.g. 0xf4c3b00c), Binary (e.g. 0b10100111001), Octal (e.g. 0777) notation is allowed too but only without sign, decimal and exponential part.
ip
如果值是有效的 IP 地址。
min(int, [number])
检查字符串长度是否大于或等于给定的 int
。要检查数字的大小,请传递可选的 number
选项。
$v->validate([
'username' => ['billy', 'required|min(3)|max(20)'],
'age' => ['20', 'required|min(18, number)|max(100, number)']
]);
max(int, [number])
检查字符串长度是否小于或等于给定的 int
。要检查数字的大小,请传递可选的 number
选项。
required
如果值存在。
url
如果值的格式是有效的 URL。
matches(field)
检查一个给定输入是否与另一个输入匹配。例如,检查 password 是否与 password_confirm 匹配。
date
如果给定输入是有效的日期。
您可以使用可读日期进行验证,如 '25th October 1961' 和 DateTime
实例。例如
$twoDaysAgo = new DateTime('2 days ago');
$date = $twoDaysAgo->format('d M Y');
$v->validate([
'date' => [$date, 'required|date']
]);
checked
如果某个字段已被“选中”或未选中,这意味着它包含以下值之一:“是”、“开启”、“1”、1、真 或 “真”。这可以用来确定HTML复选框是否被选中。
正则表达式(expression)
如果给定的输入与提供的正则表达式匹配。
贡献
请将问题提交到GitHub,或者如果您想直接贡献,请提交拉取请求。
运行测试
测试使用phpunit运行。运行./vendor/bin/phpunit
以运行测试。