verum php是 PHP 的伺服器端驗證函式庫,可讓您輕鬆驗證陣列(具有檔案支援)。它帶有自訂錯誤訊息、規則、內建翻譯和零依賴性。
PHP 伺服器端驗證函式庫
使用 Composer 安裝verum php
composer require sandromiguel/verum-php
驗證簡單的註冊表(姓名、電子郵件和年齡)
use Verum Validator ;
$ rules = [
' name ' => [
' rules ' => [
' required ' ,
],
],
' email ' => [
' rules ' => [
' required ' ,
' email ' ,
],
],
' age ' => [
' rules ' => [
' numeric ' ,
],
],
];
$ validator = new Validator ( $ _POST , $ rules );
echo json_encode (
[
' valid ' => $ validator -> validate (),
' errors ' => $ validator -> getErrors (),
]
);
輸入:
[
'name' => 'John Doe',
'email' => '[email protected]',
'age' => '20',
]
輸出:
{
"valid" : true ,
"errors" : []
}
輸入:
[
'name' => '',
'email' => 'some text',
'age' => 'some text',
]
輸出:
{
"valid" : false ,
"errors" : {
"name" : {
"label" : null ,
"rules" : {
"required" : " This field is required. "
}
},
"email" : {
"label" : null ,
"rules" : {
"email" : " This field must be a valid email address. "
}
},
"age" : {
"label" : null ,
"rules" : {
"numeric" : " This field must be numeric. "
}
}
}
}
RuleEnum
類您可以使用RuleEnum
類別來存取所有規則名稱。
use Verum Validator ;
use Verum Enum RuleEnum ;
$ rules = [
' name ' => [
' rules ' => [
RuleEnum:: REQUIRED ,
],
],
...
];
$ rules = [
' name ' => [
' label ' => ' Name ' ,
' rules ' => [
RuleEnum:: REQUIRED ,
],
],
...
];
輸出:
{
...
"errors" : {
"name" : {
"label" : " Name " ,
"rules" : {
"required" : 'The "Name" field is required.'
}
},
...
}
}
$ rules = [
' name ' => [
' label ' => [
' en ' => ' Name ' ,
' pt-pt ' => ' Nome ' ,
],
' rules ' => [
RuleEnum:: REQUIRED ,
],
],
...
];
輸出(點-點):
{
...
"errors" : {
"name" : {
"label" : " Nome " ,
"rules" : {
"required" : 'O campo "Nome" é obrigatório.'
}
},
...
}
}
您可以使用一些內建翻譯:
'en'
-> 英文(預設)'nl-nl'
-> 荷蘭語'pt-pt'
-> 葡萄牙語-葡萄牙'pt-br'
-> 葡萄牙語-巴西 $ validator = new Validator ( $ _POST , $ rules , ' pt-pt ' );
LangEnum
類別指定訊息語言 use Verum Validator ;
use Verum Enum LangEnum ;
. . .
$ validator = new Validator ( $ _POST , $ rules , LangEnum:: PT_PT );
. . .
$ validator = new Validator ( $ _POST , $ rules );
$ validator -> addSimpleCustomMessage ( ' min_length ' , ' Min Length rule custom error message ' );
. . .
輸出範例:
{
...
"errors" : {
"name" : {
"label" : " Name " ,
"rules" : {
"min_length" : " Min Length rule custom error message "
}
},
...
}
}
. . .
$ validator = new Validator ( $ _POST , $ rules );
$ validator -> addSimpleCustomMessage ( ' min_length ' , ' Number of characters detected: {param:1}. Field name: "{param:2}". ' );
. . .
輸出範例:
{
...
"errors" : {
"name" : {
"label" : " Name " ,
"rules" : {
"min_length" : 'Number of characters detected: 5. Field name: "Name".'
}
},
...
}
}
. . .
$ validator = new Validator ( $ _POST , $ rules );
$ validator -> addCustomMessage (
' required ' ,
' Custom error message with label for required rule. Label: {param:1}. ' ,
' Custom error message without label for required rule. '
);
. . .
輸出 - 帶標籤的欄位:
{
...
"errors" : {
"name" : {
"label" : " Name " ,
"rules" : {
"required" : 'Custom error message with label for required rule. Label: Name.'
}
},
...
}
}
輸出 - 沒有標籤的欄位:
{
...
"errors" : {
"name" : {
"label" : null ,
"rules" : {
"required" : " Custom error message without label for required rule. "
}
},
...
}
}
. . .
$ validator = new Validator ( $ _POST , $ rules );
$ validator -> addCustomMessages (
[
' min_length ' => ' Custom message for the "min_length" rule. ' ,
' required ' => ' Custom message for the "required" rule. ' ,
// other messages ...
]
);
. . .
. . .
$ validator = new Validator ( $ _POST , $ rules );
$ validator -> addCustomMessages (
[
' numeric ' => [
' withLabel ' => ' Custom message with label for "numeric" rule. Label: {param:1}. ' ,
' withoutLabel ' => ' Custom message without label for "numeric" rule. ' ,
],
' min_length ' => [
' withLabel ' => ' Custom message with label for "min_length" rule. Label: {param:2}, value: {param:1}. ' ,
' withoutLabel ' => ' Custom message without label for "min_length" rule. Value: {param:1}. ' ,
],
// other messages ...
]
);
. . .
使用verum php ,您可以更有效地處理多名稱欄位。這些欄位包含語言識別碼或其名稱的其他變體。例如,如果您有title.en
、 title.pt
、 description.en
和description.pt
等字段,則可以使用通配符為其指定規則。
$ rules = [
' title.* ' => [
' rules ' => [
RuleEnum:: REQUIRED ,
],
],
' description.* ' => [
' rules ' => [
RuleEnum:: REQUIRED ,
RuleEnum:: MIN_LENGTH => 10 ,
],
],
];
$ validator = new Validator ( $ _POST , $ rules );
// ...
輸出範例:
{
"valid" : false ,
"errors" : {
"title.en" : {
"label" : null ,
"rules" : {
"required" : " This field is required. "
}
},
"title.pt" : {
"label" : null ,
"rules" : {
"required" : " This field is required. "
}
},
"description.en" : {
"label" : null ,
"rules" : {
"required" : " This field is required. " ,
"min_length" : " This field must be at least 10 characters long. "
}
},
"description.pt" : {
"label" : null ,
"rules" : {
"required" : " This field is required. " ,
"min_length" : " This field must be at least 10 characters long. "
}
}
}
}
您可以使用自訂驗證並注入錯誤訊息。
if ( $ myCustomValidationFail ) {
$ validator -> addError (
' someFieldName ' ,
' Some field name ' ,
[ ' no_duplicate ' => ' A user already exists with that username ' )]
);
// ...
}
檢查該值是否僅包含字母字元。
$ rules = [
' nickname ' => [
' label ' => ' Nickname ' ,
' rules ' => [
RuleEnum:: ALPHA ,
],
],
];
價值 | 阿爾法 | 阿爾法 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ✔️ | ✔️ |
'text with spaces' |
檢查該值是否僅包含字母數字字元。
$ rules = [
' nickname ' => [
' label ' => ' Nickname ' ,
' rules ' => [
RuleEnum:: ALPHA_NUMERIC ,
],
],
];
價值 | 字母數字 | 字母數字 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ✔️ | ✔️ |
0 | ✔️ | ✔️ |
false | ||
[] | ||
-1 | ||
1 | ✔️ | ✔️ |
true | ||
'text' | ✔️ | ✔️ |
'text with spaces' |
檢查該值是否在兩個值之間。
$ rules = [
' age ' => [
' label ' => ' Age ' ,
' rules ' => [
RuleEnum:: BETWEEN => [ 12 , 29 ],
],
],
];
價值 | [1, 10] 之間 | 介於 [1, 10] + 必需之間 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ✔️ | ✔️ |
true | ||
'some text' |
檢查值的字元數是否在最小值和最大值之間。
$ rules = [
' nickname ' => [
' label ' => ' Nickname ' ,
' rules ' => [
RuleEnum:: BETWEEN_LENGTH => [ 3 , 15 ],
],
],
];
價值 | 長度之間 [5,25] | Between_length [5,25] + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
12345 | ✔️ | ✔️ |
true | ||
'text' | ||
'text with 23 characters' | ✔️ | ✔️ |
檢查該值是否為布林值。對於 1/0、“1”/“0”、“開”/“關”、“是”/“否”、真/假返回 true。
$ rules = [
' light ' => [
' label ' => ' Light ' ,
' rules ' => [
RuleEnum:: BOOLEAN_VALUE ,
],
],
];
價值 | 布林值 | 布林值 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ✔️ | ✔️ |
0 | ✔️ | ✔️ |
false | ✔️ | ✔️ |
[] | ||
-1 | ||
'1' | ✔️ | ✔️ |
1 | ✔️ | ✔️ |
true | ✔️ | ✔️ |
'text' | ||
'on' | ✔️ | ✔️ |
'off' | ✔️ | ✔️ |
'yes' | ✔️ | ✔️ |
'no' | ✔️ | ✔️ |
檢查該值是否在數組中。
$ rules = [
' priority ' => [
' label ' => ' Priority ' ,
' rules ' => [
RuleEnum:: CONTAINS => [ ' low ' , ' high ' ],
],
],
];
價值 | 包含['低','高'] | 包含 ['low','high'] + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'low' | ✔️ | ✔️ |
'high' | ✔️ | ✔️ |
檢查該值是否為有效日期 (Ymd) 還是自訂格式。
$ rules = [
' dob ' => [
' label ' => ' Date of birth ' ,
' rules ' => [
RuleEnum:: DATE ,
],
],
];
$ rules = [
' dob ' => [
' label ' => ' Date of birth ' ,
' rules ' => [
RuleEnum:: DATE => [ ' d.m.Y ' ],
],
],
];
價值 | 日期 [年] | 日期 [Ymd] + 必填 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'2020-09-30' | ✔️ | ✔️ |
檢查該值是否具有有效的電子郵件格式。
$ rules = [
' email ' => [
' label ' => ' Email ' ,
' rules ' => [
RuleEnum:: EMAIL ,
],
],
];
價值 | 電子郵件 | 電子郵件 + 必填項 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'[email protected]' | ✔️ | ✔️ |
檢查該值是否等於另一個值。
$ rules = [
' repeat_password ' => [
' label ' => ' Repeat Password ' ,
' rules ' => [
RuleEnum:: EQUALS => [ ' password ' ],
],
],
];
與'text'
比較
價值 | 等於 | 等於 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ✔️ | ✔️ |
'another text' |
檢查檔案大小是否未超過給定值。
輸入一個以位元組為單位的值。
$ rules = [
' profile_photo ' => [
' label ' => ' Profile Photo ' ,
' rules ' => [
RuleEnum:: FILE_MAX_SIZE => [ 102400 ],
],
],
];
與102400
位元組的比較
價值 | 檔案最大大小 | 文件最大大小 + 必需 |
---|---|---|
null | ✔️ | |
50000 | ✔️ | ✔️ |
150000 |
檢查文件類型是否允許。
$ rules = [
' profile_photo ' => [
' label ' => ' Profile Photo ' ,
' rules ' => [
RuleEnum:: FILE_MIME_TYPE => [ ' image/png ' , ' image/jpeg ' ],
],
],
];
價值 | 檔案mime_類型 | file_mime_type + 必需 |
---|---|---|
null | ✔️ | |
image/png | ✔️ | ✔️ |
text/plain |
檢查該數值是否為浮點數。
$ rules = [
' price ' => [
' label ' => ' Price ' ,
' rules ' => [
RuleEnum:: FLOAT_NUMBER ,
],
],
];
價值 | 浮點數 | float_number + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
12345 | ||
123.45 | ✔️ | ✔️ |
true | ||
'text' | ||
'text with spaces' |
檢查影像高度是否超過給定值。
$ rules = [
' profile_photo ' => [
' label ' => ' Profile Photo ' ,
' rules ' => [
RuleEnum:: IMAGE_MAX_HEIGHT => [ 600 ],
],
],
];
價值 | 影像最大高度 | image_max_height + 必需 |
---|---|---|
null | ✔️ | |
500像素 | ✔️ | ✔️ |
1000像素 |
檢查影像寬度是否不超過給定值。
$ rules = [
' profile_photo ' => [
' label ' => ' Profile Photo ' ,
' rules ' => [
RuleEnum:: IMAGE_MAX_WIDTH => [ 1000 ],
],
],
];
價值 | 影像最大寬度 | image_max_width + 必需 |
---|---|---|
null | ✔️ | |
500像素 | ✔️ | ✔️ |
1500像素 |
檢查影像高度是否不小於給定值。
$ rules = [
' profile_photo ' => [
' label ' => ' Profile Photo ' ,
' rules ' => [
RuleEnum:: IMAGE_MIN_HEIGHT => [ 300 ],
],
],
];
價值 | 影像最小高度 | image_min_height + 必需 |
---|---|---|
null | ✔️ | |
100像素 | ||
500像素 | ✔️ | ✔️ |
檢查影像寬度是否不小於給定值。
$ rules = [
' profile_photo ' => [
' label ' => ' Profile Photo ' ,
' rules ' => [
RuleEnum:: IMAGE_MIN_WIDTH => [ 500 ],
],
],
];
價值 | 影像最小寬度 | image_min_width + 必需 |
---|---|---|
null | ✔️ | |
400像素 | ||
600像素 | ✔️ | ✔️ |
檢查該值是否為整數。
$ rules = [
' distance ' => [
' label ' => ' Distance ' ,
' rules ' => [
RuleEnum:: INTEGER ,
],
],
];
價值 | 數位 | 數字 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ✔️ | ✔️ |
false | ||
[] | ||
-1 | ✔️ | ✔️ |
1 | ✔️ | ✔️ |
true | ||
'text' |
檢查該值是否為有效的 IP 位址。
$ rules = [
' ip ' => [
' label ' => ' IP ' ,
' rules ' => [
RuleEnum:: IP ,
],
],
];
價值 | ip | ip + 必填 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'10.10.10.10' | ✔️ | ✔️ |
'2607:f0d0:1002:51::4' | ✔️ | ✔️ |
檢查該值是否為有效的 IPv4 位址。
$ rules = [
' ipv4 ' => [
' label ' => ' IPv4 ' ,
' rules ' => [
RuleEnum:: IPV4 ,
],
],
];
價值 | ipv4 | IPv4 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'10.10.10.10' | ✔️ | ✔️ |
'2607:f0d0:1002:51::4' |
檢查該值是否為有效的 IPv6 位址。
$ rules = [
' ipv6 ' => [
' label ' => ' IPv6 ' ,
' rules ' => [
RuleEnum:: IPV6 ,
],
],
];
價值 | ipv6 | IPv6 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'10.10.10.10' | ||
'2607:f0d0:1002:51::4' | ✔️ | ✔️ |
檢查該值是否不超過給定值。
$ rules = [
' people ' => [
' label ' => ' People ' ,
' rules ' => [
RuleEnum:: MAX => [ 5 ],
],
],
];
價值 | 最大限度 | 最大+必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ✔️ | ✔️ |
0 | ✔️ | ✔️ |
false | ||
[] | ||
-1 | ✔️ | ✔️ |
1 | ✔️ | ✔️ |
true | ||
'text' | ||
12345 | ||
'12345' |
檢查值的字元數是否不超過給定值。
$ rules = [
' nickname ' => [
' label ' => ' Nickname ' ,
' rules ' => [
RuleEnum:: MAX_LENGTH => [ 2 ],
],
],
];
價值 | 最大長度 | 最大長度 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ✔️ | ✔️ |
0 | ✔️ | ✔️ |
false | ✔️ | ✔️ |
[] | ||
-1 | ✔️ | ✔️ |
1 | ✔️ | ✔️ |
true | ✔️ | ✔️ |
'text' | ||
12345 | ||
'12345' |
檢查該值是否不小於給定值。
$ rules = [
' people ' => [
' label ' => ' People ' ,
' rules ' => [
RuleEnum:: MIN => [ 2 ],
],
],
];
價值 | 分分鐘 | 分鐘 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
12345 | ✔️ | ✔️ |
'12345' | ✔️ | ✔️ |
檢查值的字元數是否不小於給定值。
$ rules = [
' nickname ' => [
' label ' => ' Nickname ' ,
' rules ' => [
RuleEnum:: MIN_LENGTH => [ 2 ],
],
],
];
價值 | 最大長度 | 最大長度 + 必需 |
---|---|---|
null | ✔️ | |
'' | ||
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ✔️ | ✔️ |
1 | ||
true | ||
'text' | ✔️ | ✔️ |
12345 | ✔️ | ✔️ |
'12345' | ✔️ | ✔️ |
檢查該值是否為數字。
$ rules = [
' age ' => [
' label ' => ' Age ' ,
' rules ' => [
RuleEnum:: NUMERIC ,
],
],
];
價值 | 數位 | 數字 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ✔️ | ✔️ |
0 | ✔️ | ✔️ |
false | ||
[] | ||
-1 | ✔️ | ✔️ |
1 | ✔️ | ✔️ |
true | ||
'text' |
檢查值是否與給定的正規表示式相符。
$ rules = [
' path ' => [
' label ' => ' Path ' ,
' rules ' => [
RuleEnum:: REGEX => [ ' //client/[0-9a-f]+$/ ' ],
],
],
];
使用'//client/[0-9a-f]+$/'
模式進行驗證
價值 | 正規表示式 | 正規表示式 + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'/client/77c9e105d1f548b29958f0512967de87' | ✔️ | ✔️ |
'/client/invalid-uuid' |
檢查該值是否不為空。
$ rules = [
' name ' => [
' label ' => ' Name ' ,
' rules ' => [
RuleEnum:: REQUIRED ,
],
],
];
價值 | 必需的 |
---|---|
null | |
'' | |
'0' | ✔️ |
0 | ✔️ |
false | ✔️ |
[] | |
-1 | ✔️ |
1 | ✔️ |
true | ✔️ |
'some text' | ✔️ |
檢查該值是否為有效的 Slug(例如 hello-world_123)。
$ rules = [
' slug ' => [
' label ' => ' Slug ' ,
' rules ' => [
RuleEnum:: SLUG ,
],
],
];
價值 | 蛞蝓 | slug + 必需 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ✔️ | ✔️ |
'text with spaces' | ||
'hello-world_123' | ✔️ | ✔️ |
檢查該值是否為有效的 URL。
$ rules = [
' url ' => [
' label ' => ' URL ' ,
' rules ' => [
RuleEnum:: URL ,
],
],
];
價值 | 網址 | 網址+必填項 |
---|---|---|
null | ✔️ | |
'' | ✔️ | |
'0' | ||
0 | ||
false | ||
[] | ||
-1 | ||
1 | ||
true | ||
'text' | ||
'http://www.some-domain.com' | ✔️ | ✔️ |
想做出貢獻嗎?歡迎所有貢獻。閱讀貢獻指南。
如果您有疑問,請推文給我@sandro_m_m 或提出問題。
該項目已根據 MIT 許可證獲得許可 - 有關詳細信息,請參閱許可證文件
**~分享就是關懷~**