PHP code example of webgeeker / validation
1. Go to this page and download the library: Download webgeeker/validation library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
webgeeker / validation example snippets
$params = $request->query(); // 获取GET参数
// 验证(如果验证不通过,会抛出异常)
Validation::validate($params, [
"offset" => "IntGe:0", // 参数"offset"必须是大于等于0的整数
"count" => "Required|IntGeLe:1,200", // 参数"count"是必需的且取值在 1 - 200 之间
]);
//验证规则
$validations = [
"offset" => "IntGe:0", // 参数offset应该大于等于0
"count" => "Required|IntGeLe:1,200", // 参数count是必需的且大于等于1小于等于200
"type" => "IntIn:1,2", // 参数type可取值为: 1, 2
"state" => [
'IfIntEq:type,1|IntEq:0', // 如果type==1(批评建议),那么参数state只能是0
'IfIntEq:type,2|IntIn:0,1,2', // 如果type==2(用户投诉),那么参数state可取值为: 1, 2, 3
],
"search.keyword" => "StrLenGeLe:1,100", // search.keyword 应该是一个长度在[1, 100]之间的字符串
"search.start_time" => "Date", // search.start_time 应该是一个包含合法日期的字符串
"search.end_time" => "Date", // search.end_time 应该是一个包含合法日期的字符串
];
// 待验证参数
$params = [
"offset" => 0, // 从第0条记录开始
"count" => 10, // 最多返回10条记录
"type" => 2, // 1-批评建议, 2-用户投诉
"state" => 0, // 0-待处理, 1-处理中, 2-已处理
"search" => [ // 搜索条件
"keyword" => '硬件故障', // 关键字
"start_time" => "2018-01-01", // 起始日期
"end_time" => "2018-01-31", // 结束日期
],
];
// 验证(如果验证不通过,会抛出异常)
Validation::validate($params, $validations);
WebGeeker\Validation\Validation;
try {
Validation::validate($_POST, [
"offset" => "IntGe:0", // 参数offset应该大于等于0
"count" => "Required|IntGeLe:1,200", // 参数count是必需的且大于等于1小于等于200
]);
} catch (\Exception $e) {
echo $e->getMessage();
}
//$params = $request->query(); // 获取GET参数
$params = $request->request->all(); // 获取POST参数
// 验证(如果验证不通过,会抛出异常)
Validation::validate($params, [
// 此处省略验证规则
]);
"size" => "IntGeLe:1,100"
"height" => "FloatGeLe:0.0,100.0"
"accept" => "BoolSmart"
"name" => "StrLenGeLe:2,20"
"comment" => "ByteLenLe:1048576"
"email" => "Email"
"phone" => "Regexp:/^1(3[0-9]|4[579]|5[0-35-9]|7[0135678]|8[0-9]|66|9[89])\d{8}$/"
"file" => "FileMaxSize:10m|FileImage"
"size" => "Required|StrIn:small,middle,large"
$validations = [
"name" => "Required|StrLenGeLe:2,20",
"sex" => "Required|IntIn:0,1",
"age" => "Required|IntGeLe:1,200",
];
$userInfo = [
"name" => "tom",
"sex" => "0",
"age" => "10",
];
Validation::validate($userInfo, $validations); // 创建用户时的验证
unset($userInfo["age"]); // 删除age字段
Validation::validate($userInfo, $validations, true); // 更新用户信息时的验证
$params = [
"comments" => [
[
"title" => "title 1",
"content" => "content 1",
],
[
"title" => "title 1",
"content" => "content 1",
],
[
"title" => "title 1",
"content" => "content 1",
],
]
];
$validations = [
"comments[*].title" => "Required|StrLenGeLe:2,50",
"comments[*].content" => "Required|StrLenGeLe:2,500",
];
Validation::validate($params, $validations);
$validations = [
"sex" => "StrIn:male,female",
"height" => [
"IfStrEq:sex,male|IntGe:180",
"IfStrEq:sex,female|IntGe:170",
],
];
"IfExist:sex|IfStrEq:sex,male|IntGe:180"
"type" => [
"StrIn:small,middle,large",
"IntIn:1,2,3",
]
$params = [
"name" => "hello",
];
$params = [
"name" => "hello",
"comment" => null,
];
$params = [
"p1" => "",
"p2" => "hello",
"p3" => "123",
];
$params = [
"title" => "a",
];
Validation::validate($params, [
"title" => "Required|StrLenGeLe:2,50",
]); // 抛出异常的错误描述为:“title”长度必须在 2 - 50 之间
Validation::validate($params, [
"title" => "Required|StrLenGeLe:2,50|Alias:标题", // 自定义参数名称
]); // 抛出异常的错误描述为:“标题”长度必须在 2 - 50 之间
Validation::validate($params, [
"title" => "Required|StrLenGeLe:2,50|>>>:标题长度应在2~50之间", // 自定义错误信息描述文本
]); // 抛出异常的错误描述为:标题长度应在2~50之间
class MyValidation extends Validation
{
// “错误提示信息模版”翻译对照表
protected static $langCodeToErrorTemplates = [
"zh-tw" => [
'Int' => '“{{param}}”必須是整數', // 🌝
'IntGt' => '“{{param}}”必須大於 {{min}}',
'Str' => '“{{param}}”必須是字符串',
],
"en-us" => [
'Int' => '{{param}} must be an integer',
'IntGt' => '{{param}} must be greater than {{min}}',
'Str' => '{{param}} must be a string',
],
];
// 文本翻译对照表
protected static $langCodeToTranslations = [
"zh-tw" => [
"变量" => "變量", // 🌙
"变量必须是整数" => "變量必須是整數", // ⭐
],
"en-us" => [
"变量" => "variable",
"变量必须是整数" => "variable must be an integer",
],
];
}
MyValidation::setLangCode("zh-tw"); // 设置语言代码
MyValidation::validate(["var" => 1.0], [
"var" => "Int", // 既没有Alias,也没有>>>,只会翻译错误提示信息模版(对应🌝那行)
]); // 会抛出异常:“var”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|Alias:变量", // 有Alias,除了翻译错误提示信息模版外,还会翻译参数名称(对应🌙那行)
]); // 会抛出异常:“變量”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|>>>:变量必须是整数", // 有>>>,会翻译自定义错误描述文本(对应⭐那行)
]); // 会抛出异常:變量必須是整數
class MyValidation extends Validation
{
// “错误提示信息模版”翻译对照表
protected static $langCodeToErrorTemplates = [
"zh-tw" => [
"“{{param}}”必须是整数" => "“{{param}}”必須是整數", // 🌝
"“{{param}}”必须是字符串" => "“{{param}}”必須是字符串",
],
"en-us" => [
"“{{param}}”必须是整数" => "{{param}} must be a integer",
"“{{param}}”必须是字符串" => "{{param}} must be a string",
],
];
// 文本翻译对照表
protected static $langCodeToTranslations = [
"zh-tw" => [
"变量" => "變量", // 🌙
"变量必须是整数" => "變量必須是整數", // ⭐
],
"en-us" => [
"变量" => "variable",
"变量必须是整数" => "variable must be an integer",
],
];
}
MyValidation::setLangCode("zh-tw"); // 设置语言代码
MyValidation::validate(["var" => 1.0], [
"var" => "Int", // 既没有Alias,也没有>>>,只会翻译错误提示信息模版(对应🌝那行)
]); // 会抛出异常:“var”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|Alias:变量", // 有Alias,除了翻译错误提示信息模版外,还会翻译参数名称(对应🌙那行)
]); // 会抛出异常:“變量”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|>>>:变量必须是整数", // 有>>>,会翻译自定义错误描述文本(对应⭐那行)
]); // 会抛出异常:變量必須是整數
// 本类实现了自定义验证器 CustomStartWith 用于验证参数是否以指定前缀开头
class CustomCaseValidation extends Validation
{
// 验证失败时的错误提示信息的模版。子类的模版在运行时会与父类的模版 $errorTemplates 合并,如果出现同名的键,子类的值会覆盖父类的值
protected static $errorTemplates = [
'CustomStartWith' => '“{{param}}”必须以"{{prefix}}"开头"',
];
/**
* 自定义验证器"CustomStartWith"的实现方法,验证输入参数 $value 是否以指定前缀开头
*
* @param $value string 待验证的值
* @param $prefix string 前缀。如果验证器为"CustomStartWith:head",则本参数的值为"head"
* @param $reason string|null 验证失败的错误提示字符串. 如果为null, 需要自动生成
* 如果验证中包含了伪验证器">>>:some reason",本参数值为"some reason",
* 如果没有提供伪验证器">>>",本参数值为null
* @param $alias string 参数别名, 用于错误提示。
* 如果验证中包含了伪验证器"Alias:姓名",则本参数值为"姓名"
* 如果没有提供"Alias",比如"name" => "StrLenGeLe:2,30",本参数值为"name"
* @return mixed 返回参数 $value 的原值
* @throws ValidationException 验证失败抛出异常
*/
public static function validateCustomStartWith($value, $prefix, $reason, $alias)
{
if (strpos(strval($value), $prefix) === 0)
return $value;
if ($reason !== null)
throw new ValidationException($reason);
$error = self::getErrorTemplate('CustomStartWith'); // 获取错误提示信息模版
$error = str_replace('{{param}}', $alias, $error);
$error = str_replace('{{prefix}}', $prefix, $error);
throw new ValidationException($error);
}
}
'name' => 'CustomStartWith:head'
/**
* 自定义验证器示例类Demo
*
* 本类实现了以下自定义验证器:
* CustomInt 用于验证参数是否是整数
* CustomIntEq 用于验证参数是否是整数,并且与指定数值相等
* CustomIntGeLe 用于验证参数是否是整数,并且其值在[min, max]之间
*/
class CustomDemoValidation extends CustomCaseValidation
{
/**
* @var array 验证失败时的错误提示信息的模版。
* 子类的模版在运行时会与父类的 $errorTemplates 合并,
* 如果出现同名的键, 子类的值会覆盖父类的值
*/
protected static $errorTemplates = [
'CustomInt' => '“{{param}}”必须是Custom整数',
'CustomIntEq' => '“{{param}}”必须等于 {{value}}',
'CustomIntGeLe' => '“{{param}}”必须大于等于 {{min}} 小于等于 {{max}}',
];
/**
* 自定义验证器"CustomInt"的实现方法
*
* @param $value string 待验证的值
* @param $reason string|null 验证失败的错误提示字符串. 如果为null, 需要自动生成
* @param $alias string 参数别名, 用于错误提示。
* @return mixed 返回参数 $value 的原值
* @throws ValidationException 验证失败抛出异常
*/
public static function validateCustomInt($value, $reason, $alias)
{
$type = gettype($value);
if ($type === 'string') {
if (is_numeric($value) && strpos($value, '.') === false)
return $value;
} elseif ($type === 'integer') {
return $value;
}
if ($reason !== null)
throw new ValidationException($reason);
$error = self::getErrorTemplate('CustomInt');
$error = str_replace('{{param}}', $alias, $error);
throw new ValidationException($error);
}
/**
* 自定义验证器"CustomIntEq"的实现方法。
* 检测 $value 与 $equalVal 是否相等。
*
* @param $value string 待验证的值
* @param $equalVal string 要比较的值
* @param $reason string|null 验证失败的错误提示字符串. 如果为null, 需要自动生成
* @param $alias string 参数别名, 用于错误提示。
* @return mixed 返回参数 $value 的原值
* @throws ValidationException 验证失败抛出异常
*/
public static function validateCustomIntEq($value, $equalVal, $reason, $alias)
{
$type = gettype($value);
if ($type === 'string') {
if (is_numeric($value) && strpos($value, '.') === false) {
$val = intval($value);
if ($val == $equalVal)
return $value;
$isTypeError = false;
} else
$isTypeError = true;
} elseif ($type === 'integer') {
if ($value == $equalVal)
return $value;
$isTypeError = false;
} else
$isTypeError = true;
if ($reason !== null)
throw new ValidationException($reason);
if ($isTypeError) {
$error = self::getErrorTemplate('CustomInt');
$error = str_replace('{{param}}', $alias, $error);
} else {
$error = self::getErrorTemplate('CustomIntEq');
$error = str_replace('{{param}}', $alias, $error);
$error = str_replace('{{value}}', $equalVal, $error);
}
throw new ValidationException($error);
}
/**
* 自定义验证器"CustomIntGeLe"的实现方法。
* 检测 $value 取值是否在[$min, $max]之间。
*
* @param $value string 待验证的值
* @param $min string 最小值
* @param $max string 最大值
* @param $reason string|null 验证失败的错误提示字符串. 如果为null, 需要自动生成
* @param $alias string 参数别名, 用于错误提示。
* @return mixed 返回参数 $value 的原值
* @throws ValidationException 验证失败抛出异常
*/
public static function validateCustomIntGeLe($value, $min, $max, $reason, $alias)
{
$type = gettype($value);
if ($type === 'string') {
if (is_numeric($value) && strpos($value, '.') === false) {
$val = intval($value);
if ($val >= $min && $val <= $max)
return $value;
$isTypeError = false;
} else
$isTypeError = true;
} elseif ($type === 'integer') {
if ($value >= $min && $value <= $max)
return $value;
$isTypeError = false;
} else
$isTypeError = true;
if ($reason !== null)
throw new ValidationException($reason);
if ($isTypeError) {
$error = self::getErrorTemplate('CustomInt');
$error = str_replace('{{param}}', $alias, $error);
} else {
$error = self::getErrorTemplate('CustomIntGeLe');
$error = str_replace('{{param}}', $alias, $error);
$error = str_replace('{{min}}', $min, $error);
$error = str_replace('{{max}}', $max, $error);
}
throw new ValidationException($error);
}
}
explode(',', $paramString)
protected static function parseParamsOfCustomFloatGtLt($paramString) {}
/**
* 自定义验证器示例类Example
*
* 本类实现了以下自定义验证器:
* CustomFloatGtLt 用于验证参数是否是浮点数,并且其值在(min, max)之间
*/
class CustomExampleValidation extends Validation
{
/**
* @var array 验证失败时的错误提示信息的模版。
* 子类的模版在运行时会与父类的 $errorTemplates 合并,
* 如果出现同名的键, 子类的值会覆盖父类的值
*/
protected static $errorTemplates = [
'CustomFloatGtLt' => '“{{param}}”必须大于 {{min}} 小于 {{max}}',
];
/**
* @var \string[][] “错误提示信息模版” $errorTemplates 的翻译对照表
* 子类的翻译对照表在运行时会与父类的 $langCode2ErrorTemplates (递归)合并,
* 如果出现同名的键, 子类的值会覆盖父类的值
*/
protected static $langCode2ErrorTemplates = [
"zh-tw" => [
'CustomFloatGtLt' => '“{{param}}”必須大於 {{min}} 小於 {{max}}',
],
"en-us" => [
'CustomFloatGtLt' => '{{param}} must be greater than {{min}} and less than {{max}}',
],
];
/**
* 自定义验证器"CustomFloatGtLt"的参数解析方法
*
* 假设验证器为"CustomFloatGtLt:1.0,10"
* 则 $paramString = "1.0,10"
* 本函数返回值为: [1.0, 10.0]
*
* @param $paramString string 验证器的参数
* @return array 返回解析后的参数的数组。数组的长度就是验证器的
* 参数个数,必须与对应的 validateCustomFloatGtLt() 方法的参数个数匹配。
* @throws ValidationException 参数解析失败抛出异常
*/
protected static function parseParamsOfCustomFloatGtLt($paramString)
{
$vals = explode(',', $paramString);
if (count($vals) !== 2)
throw new ValidationException("自定义验证器 CustomFloatGtLt 格式错误. 正确格式示例: CustomFloatGtLt:1.0,2.0");
$p1 = $vals[0];
$p2 = $vals[1];
if (is_numeric($p1) === false || is_numeric($p2) === false)
throw new ValidationException("自定义验证器 CustomFloatGtLt 参数类型错误. 正确的示例: CustomFloatGtLt:1.0,2.0");
return [$p1, $p2];
}
/**
* 自定义验证器"CustomFloatGtLt"的验证方法的实现
*
* @param $value mixed 待验证的值
* @param $min float 最小值。对应上面的 parseParamsOfCustomFloatGtLt() 方法
* 返回的数组的第0个元素($p1)
* @param $max float 最大值。对应上面的 parseParamsOfCustomFloatGtLt() 方法
* 返回的数组的第1个元素($p2)
* @param $reason string|null 验证失败的错误提示字符串. 如果为null, 需要自动生成
* @param $alias string 参数别名, 用于错误提示。
* @return mixed 返回参数 $value 的原值
* @throws ValidationException 验证失败抛出异常
*/
public static function validateCustomFloatGtLt($value, $min, $max, $reason, $alias)
{
$type = gettype($value);
if ($type === 'string') {
if (is_numeric($value)) {
$val = floatval($value);
if ($val > $min && $val < $max)
return $value;
$isTypeError = false;
} else
$isTypeError = true;
} elseif ($type === 'double' || $type === 'integer') {
if ($value > $min && $value < $max)
return $value;
$isTypeError = false;
} else
$isTypeError = true;
if ($reason !== null)
throw new ValidationException($reason);
if ($isTypeError) {
$error = '“{{param}}”必须是浮点数';
$error = str_replace('{{param}}', $alias, $error);
} else {
$error = self::getErrorTemplate('CustomFloatGtLt');
$error = str_replace('{{param}}', $alias, $error);
$error = str_replace('{{min}}', $min, $error);
$error = str_replace('{{max}}', $max, $error);
}
throw new ValidationException($error);
}
}
/**
* 自定义验证器示例类Sample
*
* 本类实现了以下自定义验证器:
* CustomStrIn 用于验证参数是否是字符串,并且其取值是指定的几个字符串之一
*/
class CustomSampleValidation extends Validation
{
/**
* @var array 验证失败时的错误提示信息的模版。
* 子类的模版在运行时会与父类的 $errorTemplates 合并,
* 如果出现同名的键, 子类的值会覆盖父类的值
*/
protected static $errorTemplates = [
'CustomStrIn' => '“{{param}}”只能取这些值: {{valueList}}',
];
/**
* @var \string[][] 文本翻译对照表
* 子类的文本翻译对照表在运行时会与父类的 $langCodeToTranslations (递归)合并,
* 如果出现同名的键, 子类的值会覆盖父类的值
*/
protected static $langCodeToTranslations = [
"zh-tw" => [
"状态" => "狀態",
],
"en-us" => [
"状态" => "status",
],
];
/**
* 自定义验证器"CustomStrIn"的参数解析方法
*
* 假设验证器为"CustomStrIn:pending,started,success,failed"
* 则 $paramString = "pending,started,success,failed"
* 则本函数返回值为(数组的数组): [
* ['pending', 'started', 'success', 'failed']
* ]
* 返回"数组的数组"可以实现验证器的参数个数可变。
*
* @param $paramString string 验证器的参数
* @return array 返回解析后的参数的数组。数组的长度就是验证器的
* 参数个数,必须与对应的 validateCustomStrIn() 方法的参数个数匹配。
*/
protected static function parseParamsOfCustomStrIn($paramString)
{
$list = explode(',', $paramString);
return [$list]; // 注意这里返回的是数组的数组
}
/**
* 自定义验证器"CustomStrIn"的验证方法的实现
*
* @param $value mixed 待验证的值
* @param $valueList string[] 可取值的列表。
* 对应上面的 parseParamsOfCustomStrIn() 方法返回的数组的第0个元素($list)
* @param $reason string|null 验证失败的错误提示字符串. 如果为null, 需要自动生成
* @param $alias string 参数别名, 用于错误提示。
* @return mixed 返回参数 $value 的原值
* @throws ValidationException 验证失败抛出异常
*/
public static function validateCustomStrIn($value, $valueList, $reason, $alias)
{
if (is_array($valueList) === false || count($valueList) === 0)
throw new ValidationException("“${alias}”参数的验证模版(StrIn:)格式错误, 必须提供可取值的列表");
if (is_string($value)) {
if (in_array($value, $valueList, true))
return $value;
$isTypeError = false;
} else
$isTypeError = true;
if ($reason !== null)
throw new ValidationException($reason);
if ($isTypeError) {
$error = '“{{param}}”必须是Custom字符串';
$error = str_replace('{{param}}', $alias, $error);
} else {
$error = self::getErrorTemplate('CustomStrIn');
$error = str_replace('{{param}}', $alias, $error);
$error = str_replace('{{valueList}}', '"'.implode('", "', $valueList).'"', $error);
}
throw new ValidationException($error);
}
}
preg_match('/^string$/', $string);
$matched = preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", "你好");
http://abc.com/index.php?p1=&&p2=hello&&p3=123
public static function validateCustomAbc($value, $reason, $alias) {}