您將需要的最後一個驗證庫!
安裝
關於mighty
快速入門
毫速度
範例
約束條件
驗證
文件
規格
變更日誌
如果您喜歡這個項目並願意支持它的發展,請給它一個,我們將不勝感激!
強大的示範" style="max-width: 100%;">
composer require marwanalsoltany/ mighty
驗證是任何 Web 應用程式中的常見任務。透過表單傳遞到應用程式的資料(或任何類型的輸入)必須始終根據一組規則進行驗證。 mighty可以以簡單且富有表現力的方式處理。
mighty是快速、強大、健壯且易於使用的驗證庫,使用起來很有趣,它使驗證任何資料變得輕而易舉。由於mighty驗證表達式語言 (mVEL)的強大功能,它與您以前見過的任何東西都不一樣。憑藉其驗證方法和超過250 個內建規則,幾乎沒有什麼是您無法以非常富有表現力和緊湊的方式進行驗證的。簡而言之, mighty就是類固醇的驗證!它確實是您需要的最後一個驗證庫。
mighty提供了幾種不同的方法來驗證資料。最常見的用例是透過 HTTP 請求驗證傳入數據,但它當然不限於此; mighty還提供約束形式的屬性,以輕鬆驗證模型和/或任何類型的物件。
mighty包含各種方便的驗證規則,您可以將它們作為單一規則應用,也可以使用運算子將它們相互組合以建立更複雜的驗證。
要了解mighty強大的驗證功能,讓我們開門見山看一些範例:
使用Validator::class
驗證表單資料:
use MAKS mighty Validator ;
$ validator = new Validator ();
$ validator
-> setData ([
' name ' => ' John Doe ' ,
' username ' => ' john.doe ' ,
' password ' => ' Super@Secret#123 ' ,
' email ' => ' [email protected] ' ,
' hobbies ' => [ ' coding ' , ' design ' , ' sports ' ],
])
-> setValidations ([
// required&string&between:3,255
' name ' => $ validator -> validation ()-> required ()-> string ()-> between ( 3 , 255 ),
// required&string&matches:/[a-z0-9._-]/i
' username ' => $ validator -> validation ()-> required ()-> string ()-> matches ( ' /[a-z0-9._-]/i ' ),
// required&string&min:8
' password ' => $ validator -> validation ()-> required ()-> string ()-> min ( 8 ),
// required&email
' email ' => $ validator -> validation ()-> required ()-> email (),
// null^(required&array&max:5)
' hobbies ' => $ validator
-> validation ()
-> null ()
-> xor ()
-> group ( fn ( $ validation ) => $ validation
-> array ()
-> max ( 5 )
),
// null|(if:${hobbies.validations.array}&(string&min:3))
// hobby can be null or a string with at least 3 characters if hobbies is an array
' hobbies.* ' => $ validator
-> validation ()
-> null ()
-> or ()
-> group ( fn ( $ validation ) => $ validation
-> if ( ' ${hobbies.validations.array} ' )
-> open ()
-> string ()
-> min ( 3 )
-> close ()
),
])
-> validate ();
$ result = $ validator -> isOK (); // boolean result of the overall validation result
$ errors = $ validator -> getErrors (); // an array of results of validations that failed
$ results = $ validator -> getResults (); // an array of results of all validations
$ validator -> check (); // void or throws an exception with a nicely formatted message of what exactly went wrong
使用Constraint::class
屬性驗證物件的狀態:
use MAKS mighty Validation Strategy ;
use MAKS mighty Validation Behavior ;
use MAKS mighty Validation Operator ;
use MAKS mighty Validation Constraint ;
use MAKS mighty Validation Constraint as Assert ;
use MAKS mighty Validation Constraint ValidatableObjectInterface ;
use MAKS mighty Validation Constraint ValidatableObjectTrait ;
class ValidatableObject implements ValidatableObjectInterface
{
use ValidatableObjectTrait;
#[ Assert Rule Equals( ' CONST ' )]
public const CONST = ' CONST ' ;
#[ Assert Rule In([ ' STATIC ' , ' VAR ' ])]
public static $ static = ' VAR ' ;
#[ Assert Rule StringConstraint]
#[ Assert Rule StringCharset( ' UTF-8 ' )]
#[ Assert Rule Between( 3 , 99 )]
public $ default = ' DEFAULT ' ;
#[ Assert Rule StringConstraint]
#[ Assert Rule StringContains( ' <element> ' )]
#[ Assert Rule Xml]
public $ xml = ' <?xml version="1.0"?><element></element> ' ;
#[ Assert Rule ArrayConstraint]
#[ Assert Shape([
' string ' => new Assert Rule Str ,
' array ' => new Assert Rule Arr ,
])]
public $ array = [
' string ' => ' value ' ,
' array ' => [],
];
#[ Assert Rule ObjectConstraint]
#[ Assert Rule ObjectIsInstanceOf(ValidatableObjectInterface::class)]
#[ Assert Valid(message: ' Not valid ' )]
public $ object ;
#[ Assert Callback( ' is_scalar ' , ' Data is not scalar ' )]
#[Constraint( ' string&min:3 ' , strategy: Strategy::FailLazy, messages: [
' string ' => ' Must be string. ' ,
' min ' => ' Must be longer than ${@arguments.0}. ' ,
])]
public function getDefault ()
{
return $ this -> default ;
}
#[ Assert Compound([
new Assert Rule Str ,
new Assert Compound ([
new Assert Rule Arr ,
new Assert Compound ([
new Assert Rule Blank ,
], Operator::Not),
], Operator::And),
], Operator::Xor, Behavior::Pessimistic, Strategy::FailLazy)]
public static function getStaticProperty ()
{
return static :: $ static ;
}
}
$ object = new ValidatableObject ();
$ result = $ object -> isValid (); // boolean result of the overall validation result
$ results = $ object -> validate (); // an array of results of all validations
$ object -> check (); // void or throws an exception with a nicely formatted message of what exactly went wrong
驗證可驗證物件的輸出範例如下所示:
// check out the previous snippet see the used constraints
$ object = new ValidatableObject ();
$ object -> object = new class implements ValidatableObjectInterface {
use ValidatableObjectTrait;
// some properties and their validation constraints ...
};
$ object -> default = null ; // this must be a string
$ object -> check ();
// ValidationFailedException::class
// Data failed to pass the validation.
// (01) The value (null) of the "ValidatableObject->default" property failed to pass the validation [string]. Problem: Value must be a string.
// (02) The value (null) of the "ValidatableObject->default" property failed to pass the validation [string.charset:"UTF-8"]. Problem: Value must be encoded in one of the following charsets: ["UTF-8"].
// (03) The value (null) of the "ValidatableObject->default" property failed to pass the validation [between:3,99]. Problem: Value must be between 3 and 99 or have a value/count/length that is between 3 and 99.
// (04) The return value (null) of the "ValidatableObject->getDefault()" method failed to pass the validation [callback]. Problem: Data is not scalar.
// (05) The return value (null) of the "ValidatableObject->getDefault()" method failed to pass the validation [string&min:3]. Problems: Must be string; Must be longer than 3.
另請檢查ValidatableObject
和ValidatableObjectChild
。
提示:更多範例可以在範例部分找到。
mighty有驗證表達式的概念。最簡單形式的驗證表達式只是一個字串,描述了mighty應如何驗證給定的資料。這些字串基於mighty驗證表達式語言規範 (mVEL)。 mVEL 非常簡單、易於理解且易於處理。它是布林代數、位元運算子、JSON 和 CSV 等完善的概念和/或規範的組合。
因此,驗證表達式可以定義為包含一些由位元運算子分隔的規則的字串,這些規則將建立一個表達式,當使用布林代數邏輯進行評估時,將產生驗證的最終結果。規則可以有參數,這些參數的類型可以使用與JSON類型相同的規則來表示。規則還可以有多個參數,參數之間用逗號 ( CSV ) 分隔。
例如required&string&between:2,255|null
是一個有效的驗證表達式,這個表達式可以理解為:
required
斷言輸入存在。string
斷言輸入是字串。between:2,255
斷言輸入是長度在 2 到 255 之間的字串。null
斷言輸入為空。 required&string&between:2,255|null
表達式表示輸入必須存在;字串類型的AND ; AND長度在 2 到 255 之間;或空。因此,它是一個可以為 null 的字串,當不為 null 時,長度必須在 2 到 255 個字元之間。
假設輸入是" mighty is Awesome!"
,針對該輸入的表達式required&string&between:2,255|null
的結果將是1&1&1|0
這將導致1
為true
,如果輸入為null
結果將為0&0&0|1
= 1
,如果輸入為X
則結果將是0&0&0|0
= 0
等...
與其他驗證實現不同,使用位元運算子的布林代數概念提供了構建可讀且緊湊的複雜驗證的可能性,同時將規則數量保持在最低限度,以相反或複合的方式重用現有邏輯,並最終保持程式碼庫盡可能乾燥。其好處可歸納為以下幾點:
~
)以執行與其通常執行的操作完全相反的操作。&
)、 OR ing(使用|
)或XOR ing(使用^
)的結果。(
) 和CLOSE (使用)
)。?
前綴)。!
前綴)。[macro]
語法執行它們,可以提高可讀性。此外, JSON的概念確保了參數資料類型的安全性,而CSV的概念則確保了參數清單具有明確的解析規則。
最棒的是,您不必記住所有規則或驗證表達式語言語法。 Validation
類別是一個流暢的接口,可用來建立驗證表達式。它了解所有mighty可用規則,並具有完整的 IDE-Intellisense 支持,使其盡可能簡單。例如:
use MAKS mighty Validation ;
// the validation expression: `required&string&between:2,255|null`
// can be constructed using the Validation::class as follows:
$ validation = ( new Validation ())-> required ()-> string ()-> between ( 2 , 255 )-> or ()-> null (); // AND is the default operator
// or statically:
$ validation = Validation:: required ()-> string ()-> between ( 2 , 255 )-> or ()-> null ();
事實:描述驗證表達式的作用通常比驗證表達式本身需要更多的文字!
以下是現實世界場景的一些範例:
use MAKS mighty Validator ;
$ result = ( $ validator = new Validator ())
-> validateOne (
' 123 ' ,
$ validator
-> validation ()
// can be an integer or float or a string that is numeric
// this example is only for demonstration only,
// the same result can be achieved using numeric() only
-> integer ()-> or ()-> float ()-> or ()-> group (
fn ( $ validation ) => $ validation -> string ()-> and ()-> numeric ()
)
)
-> toArray ();
// $result would look something like this:
[
' value ' => ' 123 ' ,
' result ' => true ,
' validations ' => [
' integer ' => false ,
' float ' => false ,
' string ' => true ,
' numeric ' => true ,
],
' errors ' => [],
' metadata ' => [
' basis ' => ' integer|float|(string&numeric) ' ,
' rules ' => ' integer|float|(string&numeric) ' ,
' expression ' => ' 0|0|(1&1) ' ,
],
];
// you can also simply use the static helper Validator::validateData($data, $validation);
use MAKS mighty Validator ;
use App Service HaveIBeenPwnedService as PasswordService ;
$ validator = new Validator ();
$ data = [
' name ' => ' John Doe ' ,
' age ' => 32 ,
' email ' => ' [email protected] ' ,
' username ' => ' john.doe ' ,
' password ' => ' Secret@123 ' ,
' image ' => ' /path/to/image.png ' ,
' submission ' => ' now ' ,
' consent ' => ' yes ' ,
' data ' => [
' nickname ' => ' JOE ' ,
' number ' => 7 ,
' hobbies ' => [
' coding ' ,
' cooking ' ,
' reading ' ,
]
],
];
$ validations = [
' name ' => $ validator -> validation ()-> required ()-> string ()-> stringCharset ([ ' UTF-8 ' , ' ASCII ' ])-> pessimistic (),
// or using mVEL => required&string&string.charset:'["UTF-8","ASCII"]'
' age ' => $ validator -> validation ()-> required ()-> integer ()-> min ( 18 ),
// or using mVEL => required&integer&min:18
' email ' => $ validator -> validation ()-> required ()-> email ()-> macro ( ' gmail ' ),
// or using mVEL => required&email&[gmail]
' username ' => $ validator -> validation ()-> required ()-> username (),
// or using mVEL => required&username
' password ' => $ validator -> validation ()-> required ()-> password ()-> callback ( fn ( $ input ) => !PasswordService:: isPwned ( $ input )),
// or using mVEL => required&password (NOTE: callback ist not possible, it requires a Validation::class instance that is bound to the Validator::class instance)
' image ' => $ validator -> validation ()-> null ()-> xor ()-> group ( fn () => $ this -> image ()-> imageDimensions ( 1920 , 1080 , ' <= ' )),
// or using mVEL => null^(image&image.dimensions:1920,1080,"<=")
' submission ' => $ validator -> validation ()-> required ()-> datetime ()-> datetimeLt ( ' 2022-12-07 ' ),
// or using mVEL => required&datetime&datetime.lt:"2022-12-07"
' consent ' => $ validator -> validation ()-> assert ( ' ${age.value} ' , 18 , ' >= ' )-> or ()-> accepted ()-> or ()-> assertEquals ( ' ${this} ' , ' granted ' )-> optimistic (),
// or using mVEL => ?assert:${age.value},18,">="|accepted|assert.equals:${this},"granted"
' data ' => $ validator -> validation ()-> required ()-> array ()-> arrayHasKey ( ' nickname ' ),
// or using mVEL => required&array&array.hasKey:"nickname"
' data.* ' => $ validator -> validation ()-> scalar ()-> or ()-> array ()-> optimistic (),
// or using mVEL => ?scalar|array
' data.nickname ' => $ validator -> validation ()-> string ()-> min ( 2 )-> max ( 32 ),
// or using mVEL => string&min:2&max:32
' data.hobbies.* ' => $ validator -> validation ()-> ifEq ( ' ${data.hobbies.validations.array} ' , false )-> or ()-> group ( fn () => $ this -> string ()-> min ( 3 )),
// or using mVEL => if.eq:${data.hobbies.validations.array},false|(string&min:3)
];
$ labels = [
' name ' => ' Name ' ,
' age ' => ' Age ' ,
' email ' => ' E-Mail ' ,
' password ' => ' Password ' ,
' image ' => ' Image ' ,
' data ' => ' Data ' ,
' data.* ' => ' Value of data ' ,
' consent ' => ' Consent ' ,
];
$ messages = [
' * ' => [ // this will be expanded for all fields
' required ' => ' ${@label} is a required field. ' ,
],
' age ' => [
' min ' => ' ${@label} must be at least ${@arguments.0}. ' ,
],
' username ' => [
' matches ' => ' ${@label} must contain letters, numbers, and the following characters ".-_" only. ' ,
],
' consent ' => [
' assert ' => ' You must be at least ${@arguments.1} years old to submit this form. ' ,
]
];
$ validator
-> setData ( $ data )
-> setValidations ( $ validations )
-> setMessages ( $ messages )
-> setLabels ( $ labels )
-> validate ();
$ results = $ validator -> getResults ();
// $result should look something like this:
[
// this will actually be a Result object
// array syntax is used here for demonstration purposes
' name ' => [
' key ' => ' name ' ,
' value ' => ' John Doe ' ,
' result ' => true ,
' validations ' => [
' required ' => true ,
' string ' => true ,
' string.charset ' => true ,
],
' errors ' => [],
' metadata ' => [
' basis ' => ' !required&string&string.charset:["UTF-8","ASCII"] ' ,
' rules ' => ' required&string&string.charset:["UTF-8","ASCII"] ' ,
' expression ' => ' 1&1&1 ' ,
],
],
// other validations ...
];
// you can also simply use the static helper Validator::validateData($data, $validations);
提示:當向Validator::class
提供訊息覆蓋時,建議使用RuleValidation::class
來設定數組鍵。此類別包含所有mighty內建規則名稱作為類別常數。
驗證器可以透過三種方式擴展:
use MAKS mighty Validator ;
use MAKS mighty Rule ;
$ validator = new Validator ();
// adding a new rule
$ validator -> addRule (
( new Rule ())
-> name ( ' equals ' )
-> arguments ([ ' string ' ])
-> callback ( fn ( string $ input , mixed $ expected ): bool => $ input == $ expected )
-> parameters ([ ' @input ' , ' @arguments.0 ' ])
-> comparison ([ ' @output ' , ' === ' , true ])
-> example ( ' equals:value ' )
-> description ( ' Asserts that the input is equal to the given value. ' )
);
// adding a new rule alias
$ validator -> addRuleAlias ( ' eq ' , ' equals ' );
// adding a new rules macro
$ validator -> addRuleMacro ( ' gmail ' , ' string&email&matches:"/@gmail.com$/i" ' );
$ results = $ validator -> validateAll (
[
' name ' => ' John ' ,
' email ' => ' [email protected] ' ,
],
[
' name ' => ' eq:John ' ,
' email ' => ' required&[gmail] ' ,
]
);
// $results should look like this:
[
// items will actually be a Result object
// array syntax is used here for demonstration purposes
' name ' => [
' key ' => ' name ' ,
' value ' => ' John ' ,
' result ' => true ,
' validations ' => [
' eq ' => true ,
],
' errors ' => [],
' metadata ' => [
' basis ' => ' eq:John ' ,
' rules ' => ' eq:John ' ,
' expression ' => ' 1 ' ,
],
],
' email ' => [
' key ' => ' email ' ,
' value ' => ' [email protected] ' ,
' result ' => false ,
' validations ' => [
' required ' => true ,
' string ' => true ,
' email ' => true ,
' matches ' => false ,
],,
' errors ' => [],
' metadata ' => [
' basis ' => ' required&[gmail] ' ,
' rules ' => ' required&(string&email&matches:"/@gmail.com$/i") ' ,
' expression ' => ' 1&(1&1&0) ' ,
],
],
];
提示:查看Validator
的預設rules
、 aliases
和macros
以查看更多範例。
mighty包含超過 250 個規則/屬性,可用於驗證任何資料或類別、類別常數、屬性和方法的值。
這些屬性分為三個主要組:
通用約束屬性位於MAKS mighty Validation
命名空間下。
該組目前僅包含一個屬性;這就是Constraint
屬性。此屬性採用驗證表達式來驗證其所應用的資料。它也是所有其他屬性的基底類別。
特殊約束屬性位於MAKS mighty ValidationConstraint
命名空間下。
此群組包含執行僅在屬性上下文中可用的特定作業的屬性。它由以下屬性組成:
Rule
:此屬性用於使用單一驗證規則來驗證任何資料。它也是規則約束屬性組中所有屬性的基底類別。Callback
:此屬性用於使用回調函數驗證任何資料。Valid
:此屬性用於驗證可驗證物件的有效性。Shape
:此屬性用於驗證陣列或物件的形狀。請注意,這是驗證一組值(結構化資料)而不是單一值的唯一屬性。Compound
:此屬性用於組合一組約束來建立驗證表達式。約束可以使用任何運算符進行組合,並且也可以具有行為。它作為一種物件導向的方式來建構驗證表達式。 注意:請注意,允許與Shape::class
和Compound::class
屬性一起使用的約束必須是Constraint::class
、 Rule::class
或Compound::class
的實際實例。不允許使用特殊約束屬性組的Callback::class
、 Valid::class
或Shape::class
。如果您需要此功能,請提出問題,我們將討論實現它
規則約束屬性位於MAKS mighty ValidationConstraintRule
命名空間下。
此群組包含基於單一驗證規則的屬性。它包含mighty提供的大部分屬性。完整清單請參閱驗證部分。
mighty有一個巨大的內建約束列表,除了mighty提供的之外,您很少需要任何其他東西。儘管如此,有時需要自訂約束,您可以透過以下方式實現這一點:
<?php
declare (strict_types= 1 );
namespace App Validation Constraint ;
use Attribute ;
use MAKS mighty Rule ;
use MAKS mighty Result ;
use MAKS mighty Validation Strategy ;
use MAKS mighty Validation Constraint ;
use MAKS mighty Validation Constraint ValidatesOne ;
// use the ValidatesMany interface if your Constraint returns a collection of Result objects
use MAKS mighty Validation Constraint ValidatesMany ;
#[Attribute(
Attribute:: TARGET_PROPERTY |
Attribute:: TARGET_METHOD
)]
class MyCustomConstraint extends Constraint implements ValidatesOne
{
public function __construct (
? string $ message = null ,
Strategy $ strategy = Strategy::FailFast,
) {
parent :: __construct (
validation: ' app.myCustomConstraint ' ,
messages: [ ' app.myCustomConstraint ' => $ message ],
strategy: $ strategy
);
}
public function validate ( mixed $ value = null ): Result
{
// it is really up to you, how you handle this
// you will just work with a normal mighty Validator
// here we're just preparing the data to pass to the Validator
$ name = '' ;
$ data = [ $ name => $ value ];
$ validations = [ $ name => $ this -> validation ];
$ messages = [ $ name => [ $ this -> validation => $ this -> messages [ $ this -> validation ] ?? null ]];
$ labels = [ $ name => static ::class];
// you can reuse the built-in rules or
// add you own Rule that handles your custom logic
$ result = $ this
-> getValidator ()
-> addRule (
// see MAKS mighty Rule for more info
( new Rule ())
-> setName ( ' app.myCustomConstraint ' )
-> setCallback ( static fn ( $ input ) => $ input /* here comes your logic */ )
-> setParameters ([ ' @input ' ]) // rule callback dependencies
-> setMessage ( ' ${@label} must follow my custom constraint validation. ' ) // this is the default message
)
-> setData ( $ data )
-> setValidations ( $ validations )
-> setMessages ( $ messages )
-> setLabels ( $ labels )
-> validate ();
return $ result [ $ name ]; // if you implement ValidatesMany, you will just return $result
}
}
注意:自訂約束被視為特殊約束屬性組的一部分(即不允許與Shape::class
和Compound::class
約束一起使用/在其內部使用)
下表列出了所有可用規則,包括其等效的屬性和方法:
Validation::class
Constraint::class
和Constraint/Rule/*
不。 | 規則 | 描述 | 屬性/方法 |
---|---|---|---|
001 | 姓名: null 用法: null | 斷言輸入為空。 | 屬性:NullConstraint::class 方法: Validation::null() |
002 | 名稱: boolean 用法: boolean | 斷言輸入是布林值。 | 屬性:Boolean::class 方法: Validation::boolean() |
003 | 名稱: integer 用法: integer | 斷言輸入是整數。 | 屬性:Integer::class 方法: Validation::integer() |
004 | 名稱: float 用途: float | 斷言輸入是浮點數。 | 屬性:FloatConstraint::class 方法: Validation::float() |
005 | 名稱: numeric 用法: numeric | 斷言輸入是數字。 | 屬性:NumericConstraint::class 方法: Validation::numeric() |
006 | 名稱: string 用法: string | 斷言輸入是字串。 | 屬性:StringConstraint::class 方法: Validation::string() |
007 | 名稱: scalar 用法: scalar | 斷言輸入是標量。 | 屬性:Scalar::class 方法: Validation::scalar() |
008 | 名稱: array 用法: array | 斷言輸入是一個數組。 | 屬性:ArrayConstraint::class 方法: Validation::array() |
009 | 名稱: object 用途: object | 斷言輸入是一個物件。 | 屬性:ObjectConstraint::class 方法: Validation::object() |
010 | 名稱: callable 用途: callable | 斷言輸入是可調用的。 | 屬性:CallableConstraint::class 方法: Validation::callable() |
011 | 名稱: iterable 用法: iterable | 斷言輸入是可迭代的。 | 屬性:IterableConstraint::class 方法: Validation::iterable() |
012 | 名稱: countable 用法: countable | 斷言輸入是可數的。 | 屬性:Countable::class 方法: Validation::countable() |
013 | 名稱: resource 用途: resource | 斷言輸入是資源。 | 屬性:ResourceConstraint::class 方法: Validation::resource() |
014 | 名稱: type 用法: type:'["int","float"]' | 斷言輸入是給定類型之一。 | 屬性:Type::class 方法: Validation::type(string|array $type) |
015 | 名稱: type.debug 用法: type.debug:string | 使用 get_debug_type() 斷言輸入屬於給定類型。 | 屬性:TypeDebug::class 方法: Validation::typeDebug(string $type) |
016 | 姓名: alpha 用途: alpha | 斷言輸入僅包含字母字元。 | 屬性:Alpha::class 方法: Validation::alpha() |
017 | 名稱: alnum 用法: alnum | 斷言輸入僅包含字母數字字元。 | 屬性:Alnum::class 方法: Validation::alnum() |
018 | 名稱: lower 使用量: lower | 斷言輸入僅包含小寫字元。 | 屬性:Lower::class 方法: Validation::lower() |
019 | 名稱: upper 用途: upper | 斷言輸入僅包含大寫字元。 | 屬性:Upper::class 方法: Validation::upper() |
020 | 名稱: cntrl 用法: cntrl | 斷言輸入僅包含控製字元。 | 屬性:Cntrl::class 方法: Validation::cntrl() |
021 | 名稱: space 用途: space | 斷言輸入僅包含空白字元。 | 屬性:Space::class 方法: Validation::space() |
022 | 名稱: punct 用法: punct | 斷言輸入僅包含標點符號。 | 屬性:Punct::class 方法: Validation::punct() |
023 | 名稱: graph 用途: graph | 斷言輸入僅包含圖形字元(建立可見輸出的字元)。 | 屬性:Graph::class 方法: Validation::graph() |
024 | 名稱: print 用途: print | 斷言輸入僅包含可列印字元。 | 屬性:PrintConstraint::class 方法: Validation::print() |
025 | 名稱: digit 用法: digit | 斷言輸入僅包含數字(數字字元)。 | 屬性:Digit::class 方法: Validation::digit() |
026 | 名稱: xdigit 用法: xdigit | 斷言輸入表示十六進制數字。 | 屬性:Xdigit::class 方法: Validation::xdigit() |
027 | 名稱: booleanLike 用法: booleanLike | 斷言輸入是可以解析為布林值的值(TRUE:true、「true」、「1」、「on」、「yes」;FALSE:false、「false」、「0」、「off」 、「否」、「」、空)。 | 屬性:BooleanLike::class 方法: Validation::booleanLike() |
028 | 名稱: integerLike 用法: integerLike:0,100 | 斷言輸入是一個可以解析為指定範圍內的整數的值。 | 屬性:IntegerLike::class 方法: Validation::integerLike(int $min = PHP_INT_MIN, int $max = PHP_INT_MAX) |
029 | 名稱: integerLike.allowOctal 用法: integerLike.allowOctal:0,100 | 斷言輸入是一個可以解析為指定範圍內的整數並且可以採用八進位表示法的值。 | 屬性:IntegerLikeAllowOctal::class 方法: Validation::integerLikeAllowOctal(int $min = PHP_INT_MIN, int $max = PHP_INT_MAX) |
030 | 名稱: integerLike.allowHex 用法: integerLike.allowHex:0,100 | 斷言輸入是一個可以解析為指定範圍內的整數的值,並且可以採用十六進位表示法。 | 屬性:IntegerLikeAllowHex::class 方法: Validation::integerLikeAllowHex(int $min = PHP_INT_MIN, int $max = PHP_INT_MAX) |
031 | 名稱: floatLike 用法: floatLike:1.0,100.0 | 斷言輸入是可以解析為指定範圍內的浮點數的值。 | 屬性:FloatLike::class 方法: Validation::floatLike(float $min = PHP_FLOAT_MIN, float $max = PHP_FLOAT_MAX) |
032 | 名稱: floatLike.allowThousands 用法: floatLike.allowThousands:1.0,100.0 | 斷言輸入是可以解析為指定範圍內的浮點數的值。 | 屬性:FloatLikeAllowThousands::class 方法: Validation::floatLikeAllowThousands(float $min = PHP_FLOAT_MIN, float $max = PHP_FLOAT_MAX) |
033 | 名稱: regexp 用法: regexp:"/[az]/i" | 斷言輸入與 Perl 相容的正規表示式相符。 | 屬性:Regexp::class 方法: Validation::regexp(string $pattern) |
034 | 名稱: ip 用途: ip | 斷言輸入是 IP 位址。 | 屬性:Ip::class 方法: Validation::ip() |
035 | 名稱: ip.v4 用法: ip.v4 | 斷言輸入是 IPv4 位址。 | 屬性:IpV4::class 方法: Validation::ipV4() |
036 | 名稱: ip.v6 用法: ip.v6 | 斷言輸入是 IPv6 位址。 | 屬性:IpV6::class 方法: Validation::ipV6() |
037 | 名稱: ip.notReserved 用法: ip.notReserved | 斷言輸入的 IP 位址不在保留的 IP 範圍內。 | 屬性:IpNotReserved::class 方法: Validation::ipNotReserved() |
038 | 名稱: ip.notPrivate 用法: ip.notPrivate | 斷言輸入的 IP 位址不在私有 IP 範圍內。 | 屬性:IpNotPrivate::class 方法: Validation::ipNotPrivate() |
039 | 名稱: mac 用途: mac | 斷言輸入是 MAC 位址。 | 屬性:Mac::class 方法: Validation::mac() |
040 | 名稱: url 用法: url | 斷言輸入是 URL。 | 屬性:Url::class 方法: Validation::url() |
041 | 名稱: url.withPath 用法: url.withPath | 斷言輸入是包含路徑的 URL。 | 屬性:UrlWithPath::class 方法: Validation::urlWithPath() |
042 | 名稱: url.withQuery 用法: url.withQuery | 斷言輸入是包含查詢的 URL。 | 屬性:UrlWithQuery::class 方法: Validation::urlWithQuery() |
043 | 姓名: email 用途: email | 斷言輸入是電子郵件地址。 | 屬性:Email::class 方法: Validation::email() |
044 | 名稱: email.withUnicode 用法: email.withUnicode | 斷言輸入是電子郵件地址(允許使用 unicode)。 | 屬性:EmailWithUnicode::class 方法: Validation::emailWithUnicode() |
045 | 名稱: domain 用途: domain | 斷言輸入是一個域。 | 屬性:Domain::class 方法: Validation::domain() |
046 | 名稱: domain.isActive 用法: domain.isActive | 斷言輸入是活動域。適用於網域和電子郵件。 | 屬性:DomainIsActive::class 方法: Validation::domainIsActive() |
047 | 名稱: file 用途: file | 斷言輸入是檔案(可以是檔案、連結或目錄)。 | 屬性:File::class 方法: Validation::file() |
048 | 名稱: file.isFile 用法: file.isFile | 斷言輸入是一個檔案。 | 屬性:FileIsFile::class 方法: Validation::fileIsFile() |
049 | 名稱: file.isLink 用法: file.isLink | 斷言輸入是一個連結。 | 屬性:FileIsLink::class 方法: Validation::fileIsLink() |
050 | 名稱: file.isDirectory 用法: file.isDirectory | 斷言輸入是目錄。 | 屬性:FileIsDirectory::class 方法: Validation::fileIsDirectory() |
051 | 名稱: file.isExecutable 用法: file.isExecutable | 斷言輸入是一個檔案並且可執行。 | 屬性:FileIsExecutable::class 方法: Validation::fileIsExecutable() |
052 | 名稱: file.isWritable 用法: file.isWritable | 斷言輸入是一個檔案並且是可寫入的。 | 屬性:FileIsWritable::class 方法: Validation::fileIsWritable() |
053 | 名稱: file.isReadable 用法: file.isReadable | 斷言輸入是一個檔案並且可讀。 | 屬性:FileIsReadable::class 方法: Validation::fileIsReadable() |
054 | 名稱: file.isUploaded 用法: file.isUploaded | 斷言輸入是透過 HTTP POST 上傳的檔案。 | 屬性:FileIsUploaded::class 方法: Validation::fileIsUploaded() |
055 | 名稱: file.size 用法: file.size:1024 | 斷言輸入是一個文件,並且大小等於給定大小(以位元組為單位)。 | 屬性:FileSize::class 方法: Validation::fileSize(int $sizeInBytes) |
056 | 名稱: file.size.lte 用法: file.size.lte:1024 | 斷言輸入是一個文件,並且大小小於或等於給定大小(以位元組為單位)。 | 屬性:FileSizeLte::class 方法: Validation::fileSizeLte(int $sizeInBytes) |
057 | 名稱: file.size.gte 用法: file.size.gte:1024 | 斷言輸入是一個文件,並且大小大於或等於給定大小(以位元組為單位)。 | 屬性:FileSizeGte::class 方法: Validation::fileSizeGte(int $sizeInBytes) |
058 | 名稱: file.dirname 用法: file.dirname:/path/to/dir | 斷言輸入是一個文件,並且其目錄名等於給定的目錄名。 | 屬性:FileDirname::class 方法: Validation::fileDirname(string $dirname) |
059 | 名稱: file.basename 用法: file.basename:file.ext | 斷言輸入是一個文件,並且其基本名稱等於給定的基本名稱。 | 屬性:FileBasename::class 方法: Validation::fileBasename(string $basename) |
060 | 名稱: file.filename 用法: file.filename:file | 斷言輸入是一個文件,並且其文件名等於給定的文件名。 | 屬性:FileFilename::class 方法: Validation::fileFilename(string $filename) |
061 | 名稱: file.extension 名用法: file.extension:ext | 斷言輸入是一個文件,且其副檔名等於給定的副檔名。 | 屬性:FileExtension::class 方法: Validation::fileExtension(string $extension) |
062 | 名稱: file.mime 用法: file.mime:text/plain | 斷言輸入是一個文件,並且其 MIME 類型是給定的 MIME 類型之一。 | 屬性:FileMime::class 方法: Validation::fileMime(string|array $mine) |
063 | 名稱: image 用途: image | 斷言輸入是圖片檔案(jpg、jpeg、png、gif、bmp、svg 或 webp)。 | 屬性:Image::class 方法: Validation::image() |
064 | 名稱: image.width 用法: image.width:1920 | 斷言輸入是圖像,且其寬度等於給定寬度(以像素為單位)。 | 屬性:ImageWidth::class 方法: Validation::imageWidth(int $width) |
065 | 名稱: image.width.lte 用法: image.width.lte:1920 | 斷言輸入是圖像,且其寬度小於或等於給定寬度(以像素為單位)。 | 屬性:ImageWidthLte::class 方法: Validation::imageWidthLte(int $width) |
066 | 名稱: image.width.gte 用法: image.width.gte:1920 | 斷言輸入是圖像,且其寬度大於或等於給定寬度(以像素為單位)。 | 屬性:ImageWidthGte::class 方法: Validation::imageWidthGte(int $width) |
067 | 名稱: image.height 用法: image.height:1080 | 斷言輸入是圖像,並且其高度等於給定高度(以像素為單位)。 | 屬性:ImageHeight::class 方法: Validation::imageHeight(int $height) |
068 | 名稱: image.height.lte 用法: image.height.lte:1080 | 斷言輸入是圖像,且其高度小於或等於給定高度(以像素為單位)。 | 屬性:ImageHeightLte::class 方法: Validation::imageHeightLte(int $height) |
069 | 名稱: image.height.gte 用法: image.height.gte:1080 | 斷言輸入是圖像,且其高度大於或等於給定高度(以像素為單位)。 | 屬性:ImageHeightGte::class 方法: Validation::imageHeightGte(int $height) |
070 | 名稱: image.dimensions 用法: image.dimensions:1920,1080,== | 斷言輸入是圖像,且其尺寸小於、等於或大於給定的寬度和高度(以像素為單位)。 | 屬性:ImageDimensions::class 方法: Validation::imageDimensions(int $width, int $height, string $operator = '==') |
071 | 名稱: image.ratio 用法: image.ratio:16:9 | 斷言輸入是影像,且其縱橫比等於給定的比率(比率必須指定為分數,如“16/9”)。 | 屬性:ImageRatio::class 方法: Validation::imageRatio(string $ratio) |
072 | 名稱: if 用法: if:7,7,== | 檢查第一個參數和第二個參數之間的條件,條件運算子也可以指定為第三個參數。 | 屬性:IfConstraint::class 方法: Validation::if(mixed $actual, mixed $expected = true, string $operator = '==') |
073 | 名稱: if.eq 用法: if.eq:3,3 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「==」。 | 屬性:IfEq::class 方法: Validation::ifEq(mixed $actual, mixed $expected) |
074 | 名稱: if.neq 用法: if.neq:1,2 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「!=」。 | 屬性:IfNeq::class 方法: Validation::ifNeq(mixed $actual, mixed $expected) |
075 | 名稱: if.id 用法: if.id:3,3 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「===」。 | 屬性:IfId::class 方法: Validation::ifId(mixed $actual, mixed $expected) |
076 | 名稱: if.nid 用法: if.nid:1,2 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「!==」。 | 屬性:IfNid::class 方法: Validation::ifNid(mixed $actual, mixed $expected) |
077 | 名稱: if.gt 用法: if.gt:2,1 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「>」。 | 屬性:IfGt::class 方法: Validation::ifGt(mixed $actual, mixed $expected) |
078 | 名稱: if.gte 用法: if.gte:2,2 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「">=」。 | 屬性:IfGte::class 方法: Validation::ifGte(mixed $actual, mixed $expected) |
079 | 名稱: if.lt 用法: if.lt:1,2 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「<」。 | 屬性:IfLt::class 方法: Validation::ifLt(mixed $actual, mixed $expected) |
080 | 名稱: if.lte 用法: if.lte:1,2 | 檢查第一個參數和第二個參數之間的條件,條件運算子為「<=」。 | 屬性:IfLte::class 方法: Validation::ifLte(mixed $actual, mixed $expected) |
081 | 名稱: empty 用途: empty | 使用empty() 語言構造斷言輸入為空(為空,即空字串、空數組、false、null 或0)。 | 屬性:EmptyConstraint::class 方法: Validation::empty() |
082 | 姓名: required 用途: required | 斷言輸入是必需的(不是空白,即不是空字串或 null)。 | 屬性:Required::class 方法: Validation::required() |
083 | 名稱: allowed 用途: allowed | 斷言允許輸入(可以為空或具有任何值,null 和空字串被視為有效值)。 | 屬性:Allowed::class 方法: Validation::allowed() |
084 | 名稱: forbidden 用途: forbidden | 斷言輸入被禁止(為空或不存在)。 | 屬性:Forbidden::class 方法: Validation::forbidden() |
085 | 姓名: accepted 用途: accepted | 斷言輸入被接受(等於:「on」、「yes」、「yeah」、「yep」、「yo」、「ok」、「okay」、「aye」、1 或「1」、true 或「 true" ) 請注意,字串以不區分大小寫的方式處理。 | 屬性:Accepted::class 方法: Validation::accepted() |
086 | 姓名: declined 使用情況: declined | 斷言輸入被拒絕(等於:「off」、「no」、「not」、「nope」、「neh」、「nay」、0 或「0」、false 或「false」)注意字串被處理以不區分大小寫的方式。 | 屬性:Declined::class 方法: Validation::declined() |
087 | 名稱: bit 用途: bit | 斷言輸入是位元(等於:1 或“1”,true;0 或“0”,false)。 | 屬性:Bit::class 方法: Validation::bit() |
088 | 名稱: bit.isOn 用法: bit.isOn | 斷言輸入是開啟位元(等於:true、1 或「1」)。 | 屬性:BitIsOn::class 方法: Validation::bitIsOn() |
089 | 名稱: bit.isOff 用法: bit.isOff | 斷言輸入是關閉位元(等於:假、0 或“0”)。 | 屬性:BitIsOff::class 方法: Validation::bitIsOff() |
090 | 名稱: equals 用法: equals:value | 斷言輸入等於給定值。適用於標量類型和 null。比較運算子是“==”。 | 屬性:Equals::class 方法: Validation::equals(string|int|float|bool|null $value) |
091 | 名稱: matches 用法: matches:'"/^[a-zA-Z0-9]+$/"' | 斷言輸入與給定模式匹配。僅適用於字串。 | 屬性:Matches::class 方法: Validation::matches(string $pattern) |
092 | 名稱: in 用法: in:val1,val2,... | 斷言輸入為給定值。適用於標量類型和 null。 | 屬性:In::class 方法: Validation::in(string|int|float|bool|null ...$values) |
093 | 名稱: count 使用 count:3 | 斷言輸入計數等於給定值。適用於所有資料類型(空:0;布林值:0 或 1;浮點/整數:數值;字串:字元計數;陣列/可計數:元素計數;物件:可存取屬性計數)。 | 屬性:Count::class 方法: Validation::count(int $count) |
094 | 姓名: min 使用: min:3 | 斷言輸入計數大於或等於給定值。適用於所有資料類型(空:0;布林值:0 或 1;浮點/整數:數值;字串:字元計數;陣列/可計數:元素計數;物件:可存取屬性計數)。 | 屬性:Min::class 方法: Validation::min(int|float $count) |
095 | 名稱: max 使用次數: max:3 | 斷言輸入計數小於或等於給定值。適用於所有資料類型(空:0;布林值:0 或 1;浮點/整數:數值;字串:字元計數;陣列/可計數:元素計數;物件:可存取屬性計數)。 | 屬性:Max::class 方法: Validation::max(int|float $count) |
096 | 名稱: between 用法: between:3,7 | 斷言輸入計數在給定值之間。適用於所有資料類型(空:0;布林值:0 或 1;浮點/整數:數值;字串:字元計數;陣列/可計數:元素計數;物件:可存取屬性計數)。 | 屬性:Between::class 方法: Validation::between(int|float $min, int|float $max) |
097 | 名稱: number.isPositive 用法: number.isPositive | 斷言輸入是正數。 | 屬性:NumberIsPositive::class 方法: Validation::numberIsPositive() |
098 | 名稱: number.isNegative 用法: number.isNegative | 斷言輸入是負數。 | 屬性:NumberIsNegative::class 方法: Validation::numberIsNegative() |
099 | 名稱: number.isEven 用法: number.isEven | 斷言輸入是偶數。 | 屬性:NumberIsEven::class 方法: Validation::numberIsEven() |
100 | 名稱: number.isOdd 用法: number.isOdd | 斷言輸入是奇數。 | 屬性:NumberIsOdd::class 方法: Validation::numberIsOdd() |
101 | 名稱: number.isMultipleOf 用法: number.isMultipleOf:3 | 斷言輸入是給定數字的倍數。 | 屬性:NumberIsMultipleOf::class 方法: Validation::numberIsMultipleOf(float $number) |
102 | 名稱: number.isFinite 用法: number.isFinite | 斷言輸入是有限數。 | 屬性:NumberIsFinite::class 方法: Validation::numberIsFinite() |
103 | 名稱: number.isInfinite 用法: number.isInfinite | 斷言輸入是無限數。 | 屬性:NumberIsInfinite::class 方法: Validation::numberIsInfinite() |
104 | 名稱: number.isNan 用法: number.isNan | 斷言輸入不是數字。 | 屬性:NumberIsNan::class 方法: Validation::numberIsNan() |
105 | 名稱: string.charset 用法: string.charset:UTF-8 | 斷言輸入以給定字元集之一(包括別名)進行編碼。檢查以區分大小寫的方式進行。 | 屬性:StringCharset::class 方法: Validation::stringCharset(string|array $charset) |
106 | 名稱: string.contains 用法: string.contains:substring | 斷言輸入包含給定的子字串。可以指定第二個布林參數以啟用嚴格模式(區分大小寫)。 | 屬性:StringContains::class 方法: Validation::stringContains(string $substring, bool $strict = false) |
107 | 名稱: string.startsWith 用法: string.startsWith:substring,1 | 斷言輸入以給定的子字串開頭。可以指定第二個布林參數以啟用嚴格模式(區分大小寫)。 | 屬性:StringStartsWith::class 方法: Validation::stringStartsWith(string $substring, bool $strict = false) |
108 | 名稱: string.endsWith 用法: string.endsWith:substring,0 | 斷言輸入以給定子字串結尾。可以指定第二個布林參數以啟用嚴格模式(區分大小寫)。 | 屬性:StringEndsWith::class 方法: Validation::stringEndsWith(string $substring, bool $strict = false) |
109 | 名稱: string.length 用法: string.length:3 | 斷言輸入是一個恰好是給定長度的字串。 | 屬性:StringLength::class 方法: Validation::stringLength(int $length) |
110 | 名稱: string.wordsCount 用法: string.wordsCount:3 | 斷言輸入是一個恰好包含給定單字數的字串。 | 屬性:StringWordsCount::class 方法: Validation::stringWordsCount(int $count) |
111 | 名稱: array.hasKey 用法: array.hasKey:key | 斷言輸入數組具有給定的鍵。 | 屬性:ArrayHasKey::class 方法: Validation::arrayHasKey(string|int $key) |
112 | 名稱: array.hasValue 用法: array.hasValue:value | 斷言輸入數組包含給定值。適用於標量類型。 | 屬性:ArrayHasValue::class 方法: Validation::arrayHasValue(mixed $value) |
113 | 名稱: array.hasDistinct 用法: array.hasDistinct:key | 斷言輸入是一個多維數組,其中包含給定鍵的不同值。 | 屬性:ArrayHasDistinct::class 方法: Validation::arrayHasDistinct(string|int $key) |
114 | 名稱: array.isAssociative 用法: array.isAssociative | 斷言輸入是關聯數組。 | 屬性:ArrayIsAssociative::class 方法: Validation::arrayIsAssociative() |
115 | 名稱: array.isSequential 用法: array.isSequential | 斷言輸入是順序數組。 | 屬性:ArrayIsSequential::class 方法: Validation::arrayIsSequential() |
116 | 名稱: array.isUnique 用法: array.isUnique | 斷言輸入數組包含唯一值。僅適用於一維數組。 | 屬性:ArrayIsUnique::class 方法: Validation::arrayIsUnique() |
117 | 名稱: array.subset 用法: array.subset:'{"a":1,"b":2}' | 斷言輸入是包含給定子集的陣列。請注意,此檢查僅適用於陣列的第一個維度。 | 屬性:ArraySubset::class 方法: Validation::arraySubset(array $subset) |
118 | 名稱: object.hasProperty 用法: object.hasProperty:property | 斷言輸入具有給定屬性。 | 屬性:ObjectHasProperty::class 方法: Validation::objectHasProperty(string $property) |
119 | 名稱: object.hasMethod 用法: object.hasMethod:method | 斷言輸入具有給定的方法。 | 屬性:ObjectHasMethod::class 方法: Validation::objectHasMethod(string $method) |
120 | 名稱: object.isStringable 用法: object.isStringable | 斷言輸入實作 __toString() 方法。 | 屬性:ObjectIsStringable::class 方法: Validation::objectIsStringable() |
121 | 名稱: object.isInstanceOf 用法: object.isInstanceOf:NamespaceClass | 斷言輸入是給定類別的實例。 | 屬性:ObjectIsInstanceOf::class 方法: Validation::objectIsInstanceOf(string $classFQN) |
122 | 名稱: object.isSubclassOf 用法: object.isSubclassOf:NamespaceClass | 斷言輸入是給定類別的子類別。 | 屬性:ObjectIsSubclassOf::class 方法: Validation::objectIsSubclassOf(string $classFQN) |
123 | 名稱: serialized 用途: serialized | 斷言輸入是有效的 PHP 序列化資料。 | 屬性:Serialized::class 方法: Validation::serialized() |
124 | 名稱: json 用法: json | 斷言輸入是有效的 JSON。 | 屬性:Json::class 方法: Validation::json() |
125 | 名稱: base64 用法: base64 | 斷言輸入是有效的 Base64 編碼字串。 | 屬性:Base64::class 方法: Validation::base64() |
126 | 名稱: xml 用法: xml | 斷言輸入是有效的 XML。 | 屬性:Xml::class 方法: Validation::xml() |
127 | 名稱: locale 用法: locale | 斷言輸入是有效的區域設定標識符(預設值:[ISO 639-1] 或[ISO 639-1]_[ISO 3166-1 alpha-2],不區分大小寫,在檢查之前對輸入進行規範化(破折號到底線,無點或字元集);嚴格:[ISO 639-1] 或 [ISO 639-1]_[ISO 3166-1 alpha-2],區分大小寫,無需規範化。 | 屬性:Locale::class 方法: Validation::locale(bool $strict = false) |
128 | 名稱: language 用途: language | 斷言輸入是有效的語言代碼(預設值:“ISO 639-1”;長整型:“ISO 639-2/T”)。 | 屬性:Language::class 方法: Validation::language(bool $long = false) |
129 | 名稱: country 用途: country | 斷言輸入是有效的國家/地區代碼(預設值:“ISO 3166-1 alpha-2”;長整型:“ISO 3166-1 alpha-3”)。 | 屬性:Country::class 方法: Validation::country(bool $long = false) |
130 | 名稱: timezone 用途: timezone | 斷言輸入是有效的時區標識符(預設:不區分大小寫;嚴格:區分大小寫)。 | 屬性:Timezone::class 方法: Validation::timezone(bool $strict = false) |
131 | 名稱: datetime 用法: datetime | 斷言輸入是有效的日期時間字串/物件。 | 屬性:Datetime::class 方法: Validation::datetime() |
132 | 名稱: datetime.eq 用法: datetime.eq:"2015-01-01" | 斷言輸入等於給定的日期時間字串。 | 屬性:DatetimeEq::class 方法: Validation::datetimeEq(string $datetime) |
133 | 名稱: datetime.lt 用法: datetime.lt:tomorrow | 斷言輸入是小於(之前)給定日期時間字串的日期時間字串/物件。 | 屬性:DatetimeLt::class 方法: Validation::datetimeLt(string $datetime) |
134 | 名稱: datetime.lte 用法: datetime.lte:tomorrow | 斷言輸入是小於(之前)或等於給定日期時間字串的日期時間字串/物件。 | 屬性:DatetimeLte::class 方法: Validation::datetimeLte(string $datetime) |
135 | 名稱: datetime.gt 用法: datetime.gt:today | 斷言輸入是大於給定日期時間字串(之後)的日期時間字串/物件。 | 屬性:DatetimeGt::class 方法: Validation::datetimeGt(string $datetime) |
136 | 名稱: datetime.gte 用法: datetime.gte:today | 斷言輸入是大於(之後)或等於給定日期時間字串的日期時間字串/物件。 | 屬性:DatetimeGte::class 方法: Validation::datetimeGte(string $datetime) |
137 | 名稱: datetime.birthday 用法: datetime.birthday | 斷言輸入是今天生日的日期時間字串/物件。輸入最好採用「YYYY-MM-DD」格式。 | 屬性:DatetimeBirthday::class 方法: Validation::datetimeBirthday() |
138 | 名稱: datetime.format 用法: datetime.format:"Ymd H:i:s" | 斷言輸入是具有給定格式的有效日期/時間。 | 屬性:DatetimeFormat::class 方法: Validation::datetimeFormat(string $format) |
139 | 名稱: datetime.format.global 用法: datetime.format.global | 斷言輸入看起來像 HTML5 規範中定義的有效全域日期時間字串。 | 屬性:DatetimeFormatGlobal::class 方法: Validation::datetimeFormatGlobal() |
140 | 名稱: datetime.format.local 用法: datetime.format.local | 斷言輸入看起來像 HTML5 規範中定義的有效本地日期時間字串。 | 屬性:DatetimeFormatLocal::class 方法: Validation::datetimeFormatLocal() |
141 | 名稱: datestamp 用途: datestamp | 斷言輸入看起來像人類日期戳記、DMY 或 MDY 格式,用點、破折號或斜線分隔。 | 屬性:Datestamp::class 方法: Validation::datestamp() |
142 | 名稱: datestamp.ymd 用法: datestamp.ymd | 斷言輸入看起來像人類 YMD 格式的日期戳,用點、破折號或斜線分隔。 | 屬性:DatestampYmd::class 方法: Validation::datestampYmd() |
143 | 名稱: datestamp.dmy 用法: datestamp.dmy | 斷言輸入看起來像人類 DMY 格式的日期戳,用點、破折號或斜線分隔。 | 屬性:DatestampDmy::class 方法: Validation::datestampDmy() |
144 | 名稱: datestamp.mdy 用法: datestamp.mdy | 斷言輸入看起來像人類 MDY 格式的日期戳,用點、破折號或斜線分隔。 | 屬性:DatestampMdy::class 方法: Validation::datestampMdy() |
145 | 名稱: timestamp 用途: timestamp | 斷言輸入看起來像人類時間戳,24 或 12 小時格式,有或沒有秒。 | 屬性:Timestamp::class 方法: Validation::timestamp() |
146 | 名稱: timestamp.12 用法: timestamp.12 | 斷言輸入看起來像人類時間戳,12 小時格式,帶或不帶秒以及可選的 AM/PM。 | 屬性:Timestamp12::class 方法: Validation::timestamp12() |
147 | 名稱: timestamp.hms 用法: timestamp.hms | 斷言輸入看起來像人類時間戳,24 或 12 小時格式,帶秒。 | 屬性:TimestampHms::class 方法: Validation::timestampHms() |
148 | 名稱: timestamp.hm 用法: timestamp.hm | 斷言輸入看起來像人類時間戳,24 或 12 小時格式,不含秒。 | 屬性:TimestampHm::class 方法: Validation::timestampHm() |
149 | 名稱: timestamp.ms 用法: timestamp.ms | 斷言輸入看起來像人類時間戳,僅包含分鐘和秒。 | 屬性:TimestampMs::class 方法: Validation::timestampMs() |
150 | 名稱: calender.day 用法: calender.day | 斷言輸入看起來像鏡頭或長格式的日曆日(“星期一”或“星期一”)。 | 屬性:CalenderDay::class 方法: Validation::calenderDay() |
151 | 名稱: calender.month 用法: calender.month | 斷言輸入看起來像鏡頭或長格式(“Jan”或“January”)的日曆月。 | 屬性:CalenderMonth::class 方法: Validation::calenderMonth() |
152 | 姓名: username 用途: username | 斷言輸入是有效的使用者名稱(4-32 個字元之間,由任何大小寫的字母組成,可選數字,可選以下字元之一“-_.”(不連續),並且必須始終以字母開頭並結尾帶有字母或數字)。 | 屬性:Username::class 方法: Validation::username() |
153 | 名稱: password 用途: password | 斷言輸入的是有效密碼(至少 8 個字符,至少由 1 個小寫字母和 1 個大寫字母、至少 1 個數字、至少 1 個特殊字符以及可選的空格組成)。 | 屬性:Password::class 方法: Validation::password() |
154 | 名稱: uuid 用法: uuid | 斷言輸入是有效的 UUID。可以指定版本 (v1/v2/v3/v4/v5) 以縮小模式範圍。 | 屬性:Uuid::class 方法: Validation::uuid(string|int|null $version = null) |
155 | 名稱: ascii 用法: ascii | 斷言輸入是僅包含 ASCII 字元的字串(ASCII 相容字串)。 | 屬性:Ascii::class 方法: Validation::ascii() |
156 | 名稱: slug 用途: slug | 斷言輸入是有效的 slug。 | 屬性:Slug::class 方法: Validation::slug() |
157 | 名稱: meta 用法: meta | 斷言輸入是僅包含元字元(特殊字元)(即“@、#、$、...”)的字串。 | 屬性:Meta::class 方法: Validation::meta() |
158 | 名稱: text 用途: text | 斷言輸入是包含任何語言的字母和標點符號的字串。 | 屬性:Text::class 方法: Validation::text() |
159 | 名稱: words 用法: words | 斷言輸入是一個僅包含單字和空格而沒有任何其他字元的字串。 | 屬性:Words::class 方法: Validation::words() |
160 | 名稱: spaceless 用途: spaceless | 斷言輸入是不包含空格字元的字串。 | 屬性:Spaceless::class 方法: Validation::spaceless() |
161 | 名稱: emoji 用途: emoji | 斷言輸入包含表情符號。 | 屬性:Emoji::class 方法: Validation::emoji() |
162 | 名稱: roman 用法: roman | 斷言輸入是有效的羅馬數字。 | 屬性:Roman::class 方法: Validation::roman() |
163 | 名稱: phone 用途: phone | 斷言輸入是有效的電話號碼(支援:北美、歐洲以及大多數亞洲和中東國家)。 | 屬性:Phone::class 方法: Validation::phone() |
164 | 名稱: geolocation 用途: geolocation | 斷言輸入是有效的地理位置(緯度和經度座標組合)。 | 屬性:Geolocation::class 方法: Validation::geolocation() |
165 | 名稱: version 用途: version | 斷言輸入是有效的語意版本號。 | 屬性:Version::class 方法: Validation::version() |
166 | 名稱: amount 用量: amount | 斷言輸入僅包含數字、可選的小數點(逗號或點)和可選的減號(例如用於金額)。 | 屬性:Amount::class 方法: Validation::amount() |
167 | 姓名: amount.dollar 用途: amount.dollar | 斷言輸入是格式有效的美元金額,其中小數點和千位分隔符號是可選的。 | 屬性:AmountDollar::class 方法: Validation::amountDollar() |
168 | 名稱: amount.euro 用途: amount.euro | 斷言輸入是格式有效的歐元金額,其中小數點和千位分隔符號是可選的。 | 屬性:AmountEuro::class 方法: Validation::amountEuro() |
169 | 名稱: color 用途: color | 斷言輸入是有效的 CSS 顏色(關鍵字「loose」、HEX、HEX-Alpha、RGB、RGBA、RGB「新文法」、HSL、HSLA、HSL「新文法」)。 | 屬性:Color::class 方法: Validation::color() |
170 | 名稱: color.hex 用法: color.hex | 斷言輸入是有效的 CSS HEX 顏色。 | 屬性:ColorHex::class 方法: Validation::colorHex() |
171 | 名稱: color.hexShort 用法: color.hexShort | 斷言輸入是有效的 CSS 3-Char-HEX 顏色。 | 屬性:ColorHexShort::class 方法: Validation::colorHexShort() |
172 | 名稱: color.hexLong 用法: color.hexLong | 斷言輸入是有效的 CSS 6-Char-HEX 顏色。 | 屬性:ColorHexLong::class 方法: Validation::colorHexLong() |
173 | 名稱: color.hexAlpha 用法: color.hexAlpha | 斷言輸入是有效的 CSS HEX-Alpha(4 或 8 個字元)顏色。 | 屬性:ColorHexAlpha::class 方法: Validation::colorHexAlpha() |
174 | 名稱: color.rgb 用法: color.rgb | 斷言輸入是有效的 CSS RGB 顏色。 | 屬性:ColorRgb::class 方法: Validation::colorRgb() |
175 | 名稱: color.rgba 用法: color.rgba | 斷言輸入是有效的 CSS RGBA 顏色。 | 屬性:ColorRgba::class 方法: Validation::colorRgba() |
176 | 名稱: color.rgb.new 用法: color.rgb.new | 斷言輸入是有效的 CSS4 RGB 顏色。 | 屬性:ColorRgbNew::class 方法: Validation::colorRgbNew() |
177 | 名稱: color.hsl 用法: color.hsl | 斷言輸入是有效的 CSS HSL 顏色。 | 屬性:ColorHsl::class 方法: Validation::colorHsl() |
178 | 名稱: color.hsla 用法: color.hsla | 斷言輸入是有效的 CSS HSLA 顏色。 | 屬性:ColorHsla::class 方法: Validation::colorHsla() |
179 | 名稱: color.hsl.new 用法: color.hsl.new | 斷言輸入是有效的 CSS4 HSL 顏色。 | 屬性:ColorHslNew::class 方法: Validation::colorHslNew() |
180 | 名稱: color.keyword 用法: color.keyword | 斷言輸入是有效的CSS關鍵字顏色(嚴格,如CSS規格)。 | 屬性:ColorKeyword::class 方法: Validation::colorKeyword() |
181 | 名稱: ssn 用法: ssn | 斷言該輸入是有效的SSN(美國社會安全號碼)。 | 屬性:Ssn::class 方法: Validation::ssn() |
182 | 名稱: sin 用法: sin | 斷言輸入是有效的罪過(CA社會保險號碼)。 | 屬性:Sin::class 方法: Validation::sin() |
183 | 名稱: nino 用法: nino | 斷言該投入是有效的NINO(英國國民保險號碼)。 | 屬性:Nino::class 方法: Validation::nino() |
184 | 名稱: vin 用法: vin | 斷言輸入是有效的VIN(車輛識別號碼)。 | 屬性:Vin::class 方法: Validation::vin() |
185 | 姓名: issn 用法: issn | 斷言該輸入是有效的ISSN(國際標準序號)。 | 屬性:Issn::class 方法: Validation::issn() |
186 | 名稱: isin 用法: isin | 斷言輸入是有效的ISIN(國際證券識別編號)。 | 屬性:Isin::class 方法: Validation::isin() |
187 | 名稱: isbn 用法: isbn | 斷言該輸入是有效的ISBN(國際標準簿號)。可以指定類型(10/13)以縮小圖案的範圍。 | 屬性:Isbn::class 方法: Validation::isbn(string|int|null $type = null) |
188 | 名稱: imei 用法: imei | 斷言輸入是有效的IMEI(國際行動站設備識別號碼)。 | 屬性:Imei::class 方法: Validation::imei() |
189 | 名稱: imei.sv 用法: imei.sv | 斷言該輸入是有效的IMEI-SV(國際行動站設備識別和軟體版本編號)。 | 屬性:ImeiSv::class 方法: Validation::imeiSv() |
190 | 名稱: meid 用法: meid | 斷言輸入是有效的MEID(行動裝置識別碼)。 | 屬性:Meid::class 方法: Validation::meid() |
191 | 名稱: esn 用法: esn | 斷言輸入是有效的ESN(電子序號)。 | 屬性:Esn::class 方法: Validation::esn() |
192 | 名稱: currency 用法: currency | 斷言輸入是有效的貨幣代碼(預設值:“ ISO 4217 alpha”; numeric:“ ISO 4217數字”)。 | 屬性:Currency::class 方法: Validation::currency(bool $numeric = false) |
193 | 名稱: currency.name 用法: currency.name | 斷言輸入是有效的貨幣名稱(如ISO 4217中)。 | 屬性:CurrencyName::class 方法: Validation::currencyName() |
194 | 名稱: creditcard 用法: creditcard | 斷言輸入是有效的信用卡號,允許均衡的空間和/或破折號。 | 屬性:Creditcard::class 方法: Validation::creditcard() |
195 | 名稱: creditcard.visa 用法: creditcard.visa | 斷言輸入是有效的簽證信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardVisa::class 方法: Validation::creditcardVisa() |
196 | 名稱: creditcard.mastercard 用法: creditcard.mastercard | 斷言輸入是有效的萬事達卡信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardMastercard::class 方法: Validation::creditcardMastercard() |
197 | 名稱: creditcard.discover 用法: creditcard.discover | 斷言輸入是有效的發現信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardDiscover::class 方法: Validation::creditcardDiscover() |
198 | 名稱: creditcard.americanExpress 用法: creditcard.americanExpress | 斷言該輸入是有效的美國運通信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardAmericanExpress::class 方法: Validation::creditcardAmericanExpress() |
199 | 名稱: creditcard.dinersClub 用法: creditcard.dinersClub | 斷言輸入是有效的食客俱樂部信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardDinersClub::class 方法: Validation::creditcardDinersClub() |
200 | 名稱: creditcard.jcb 用法: creditcard.jcb | 斷言輸入是有效的JCB信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardJcb::class 方法: Validation::creditcardJcb() |
201 | 名稱: creditcard.maestro 用法: creditcard.maestro | 斷言輸入是有效的大師信用卡號,平衡空間和/或破折號。 | 屬性:CreditcardMaestro::class 方法: Validation::creditcardMaestro() |
第202章 | 名稱: creditcard.chinaUnionPay 用法: creditcard.chinaUnionPay | 斷言該投入是有效的中國聯合賽信用卡號,允許平衡的空間和/或破折號。 | 屬性:CreditcardChinaUnionPay::class 方法: Validation::creditcardChinaUnionPay() |
203 | 名稱: creditcard.instaPayment 用法: creditcard.instaPayment | 斷言輸入是有效的Instapayment信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardInstaPayment::class 方法: Validation::creditcardInstaPayment() |
204 | 名稱: creditcard.laser 用法: creditcard.laser | 斷言輸入是有效的雷射信用卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardLaser::class 方法: Validation::creditcardLaser() |
205 | 名稱: creditcard.uatp 用法: creditcard.uatp | 斷言輸入是有效的UATP信用卡號,平衡空間和/或破折號。 | 屬性:CreditcardUatp::class 方法: Validation::creditcardUatp() |
206 | 名稱: creditcard.mir 用法: creditcard.mir | 斷言輸入是有效的mir支付系統卡號,允許平衡空間和/或破折號。 | 屬性:CreditcardMir::class 方法: Validation::creditcardMir() |
207 | 名稱: cvv 用法: cvv | 斷言輸入是有效的CVV(卡片安全碼)。 | 屬性:Cvv::class 方法: Validation::cvv() |
208 | 名稱: bic 用法: bic | 斷言輸入是有效的BIC(銀行識別碼)。 | 屬性:Bic::class 方法: Validation::bic() |
209 | 名稱: iban 用法: iban:IQ | 斷言該投入是有效的IBAN(國際銀行帳號)。可以指定“ ISO 3166-1 alpha-2”國家代碼以縮小模式。 | 屬性:Iban::class 方法: Validation::iban(?string $country = null) |
210 | 名稱: luhn 用法: luhn | 斷言輸入通過了Luhn算法檢查。此規則主要與其他規則(如信用卡號和識別碼)一起使用,以進一步檢查主題的有效性。 | 屬性:Luhn::class 方法: Validation::luhn() |
211 | 名稱: php.keyword 用法: php.keyword | 斷言輸入是PHP語言關鍵字。 | 屬性:PhpKeyword::class 方法: Validation::phpKeyword() |
212 | 名稱: php.reserved 用法: php.reserved | 斷言輸入是PHP語言保留的單字。 | 屬性:PhpReserved::class 方法: Validation::phpReserved() |
213 | 名稱: php.reserved.extra 用法: php.reserved.extra | 斷言輸入是PHP語言保留的單字,包括軟保留的單字。 | 屬性:PhpReservedExtra::class 方法: Validation::phpReservedExtra() |
214 | 名稱: regex 用法: regex | 斷言輸入是有效的正規表示式。 | 屬性:Regex::class 方法: Validation::regex() |
215 | 名稱: bool 用法:請參閱 boolean | 別名,請參閱boolean 以取得完整的描述。 | 屬性:BoolConstraint::class 方法: Validation::bool() |
216 | 名稱: int 用法:請參閱 integer | 別名,請參閱integer 以取得完整的描述。 | 屬性:IntConstraint::class 方法: Validation::int() |
217 | 名稱: long 用法:請參閱 integer | 別名,請參閱integer 以取得完整的描述。 | 屬性:Long::class 方法: Validation::long() |
218 | 名稱: double 用法:請參閱 float | 別名,請參閱float 以取得完整的描述。 | 屬性:Double::class 方法: Validation::double() |
219 | 名稱: real 用法:請參閱 float | 別名,請參閱float 以取得完整的描述。 | 屬性:Real::class 方法: Validation::real() |
220 | 名稱: str 用法:請參閱 string | 別名,請參閱string 以進行完整說明。 | 屬性:Str::class 方法: Validation::str() |
221 | 名稱: arr 用法:請參閱 array | 別名,請參閱array 以獲取完整描述。 | 屬性:Arr::class 方法: Validation::arr() |
222 | 名稱: obj 用法:請參閱 object | 別名,請參閱完整描述的object 。 | 屬性:Obj::class 方法: Validation::obj() |
223 | 名稱: stream 用法:請參閱 resource | 別名,請參閱resource 以進行完整描述。 | 屬性:Stream::class 方法: Validation::stream() |
224 | 名稱: assert 用法:看看 if | 別名,請if 完整的描述。 | 屬性:Assert::class 方法: Validation::assert(mixed $actual, mixed $expected = true, string $operator = '==') |
225 | 名稱: assert.equals 用法:查看 if.eq | 別名,請參閱if.eq 以取得完整描述。 | 屬性:AssertEquals::class 方法: Validation::assertEquals(mixed $actual, mixed $expected) |
226 | 名稱: assert.notEquals 用法:查看 if.neq | 別名,請參閱if.neq 以取得完整的描述。 | 屬性:AssertNotEquals::class 方法: Validation::assertNotEquals(mixed $actual, mixed $expected) |
227 | 名稱: assert.greaterThan 用法:請參閱 if.gt | 別名,請參閱if.gt 以取得完整說明。 | 屬性:AssertGreaterThan::class 方法: Validation::assertGreaterThan(mixed $actual, mixed $expected) |
228 | 名稱: assert.greaterThanOrEquals 用法:查看 if.gte | 別名,請參閱if.gte 以取得完整的描述。 | 屬性:AssertGreaterThanOrEquals::class 方法: Validation::assertGreaterThanOrEquals(mixed $actual, mixed $expected) |
229 | 名稱: assert.lessThan 用法:查看 if.lt | 別名,請參閱if.lt 以取得完整描述。 | 屬性:AssertLessThan::class 方法: Validation::assertLessThan(mixed $actual, mixed $expected) |
230 | 名稱: assert.lessThanOrEquals 用法:查看 if.lte | 別名,請參閱if.lte 以取得完整的描述。 | 屬性:AssertLessThanOrEquals::class 方法: Validation::assertLessThanOrEquals(mixed $actual, mixed $expected) |
第231章 | 名稱: blank 用法:請參閱 empty | 別名,請empty 全部描述。 | 屬性:Blank::class 方法: Validation::blank() |
第232章 | 名稱: is 用法:請參閱 equals | 別名,請equals 完整描述。 | 屬性:Is::class 方法: Validation::is(mixed $value) |
233 | 名稱: same 用法:請參閱 equals | 別名,請equals 完整描述。 | 屬性:Same::class 方法: Validation::same(mixed $value) |
234 | 名稱: pattern 用法:請參閱 matches | 別名,請參閱完整描述的matches 。 | 屬性:Pattern::class 方法: Validation::pattern(string $pattern) |
235 | 名稱: choice 用法: in | 別名,請in 完整的描述。 | 屬性:Choice::class 方法: Validation::choice(string|int|float|bool|null ...$values) |
236 | 名稱: size 用法:請參閱 count | 別名,請count 完整描述。 | 屬性:Size::class 方法: Validation::size(int $size) |
第237章 | 名稱: length 用法:請參閱 count | 別名,請count 完整描述。 | 屬性:Length::class 方法: Validation::length(int $count) |
238 | 名稱: range 用法: between | 別名,請參閱完整描述between 。 | 屬性:Range::class 方法: Validation::range(int|float $min, int|float $max) |
239 | 名稱: minmax 用法: between | 別名,請參閱完整描述between 。 | 屬性:Minmax::class 方法: Validation::minmax(int|float $min, int|float $max) |
240 | 名稱: filled 用法:請參閱 required | 別名,請參閱完整描述required 。 | 屬性:Filled::class 方法: Validation::filled() |
第241章 | 名稱: present 用法:請參閱 required | 別名,請參閱完整描述required 。 | 屬性:Present::class 方法: Validation::present() |
第242章 | 名稱: optional 用法:請參閱 allowed | 別名,請allowed 完整的描述。 | 屬性:Optional::class 方法: Validation::optional() |
243 | 名稱: date 用法:請參閱 datetime | 別名,請參閱datetime 以取得完整描述。 | 屬性:Date::class 方法: Validation::date() |
244 | 姓名: date.equals 用法:請參閱 datetime.eq | 別名,請參閱datetime.eq 以取得完整說明。 | 屬性:DateEquals::class 方法: Validation::dateEquals(string $datetime) |
245 | 名稱: date.before 用法:請參閱 datetime.lt | 別名,請參閱datetime.lt 以取得完整說明。 | 屬性:DateBefore::class 方法: Validation::dateBefore(string $datetime) |
246 | 名稱: date.beforeOrEquals 用法:請參閱 datetime.lte | 別名,請參閱datetime.lte 以取得完整說明。 | 屬性:DateBeforeOrEquals::class 方法: Validation::dateBeforeOrEquals(string $datetime) |
第247章 | 姓名: date.after 用法:請參閱 datetime.gt | 別名,請參閱datetime.gt 以取得完整說明。 | 屬性:DateAfter::class 方法: Validation::dateAfter(string $datetime) |
248 | 名稱: date.afterOrEquals 用法:請參閱 datetime.gte | 別名,請參閱datetime.gte 以取得完整描述。 | 屬性:DateAfterOrEquals::class 方法: Validation::dateAfterOrEquals(string $datetime) |
249 | 名稱: date.format 用法:請參閱 datetime.format | 別名,請參閱datetime.format 以取得完整說明。 | 屬性:DateFormat::class 方法: Validation::dateFormat(string $format) |
250 | 名稱: cakeday 用法:請參閱 datetime.birthday | 別名,請參閱datetime.birthday 以取得完整描述。 | 屬性:Cakeday::class 方法: Validation::cakeday() |
宏 | 驗證表達式 |
---|---|
[nullable] | null^~empty |
[alnumDash] | matches:"/[a-zA-Z0-9-_]+/" |
[twitterHandle] | matches:'"/^[a-zA-Z_]{1}[a-zA-Z0-9_]{0,14}$/"' |
[gmail] | email&string.contains:"@gmail." |
[eduMail] | email&string.endsWith:".edu" |
到目前為止, mighty似乎正在做太多事情,並且表現問題開始引起。好吧,無需為此擔心。 mighty確實很快,並且經過優化以提供最佳性能。以下是驗證器性能的一些基準:
在Laravel應用程式中, mighty驗證器和Laravel驗證器的性能。測試是使用50000個元素進行的,其中一半是整數,另一半是數字字串。每個驗證者進行了10次測試(連續),並收集了這10個的平均結果:
$ data = array_merge ( range ( 1 , 25000 ), array_map ( ' strval ' , range ( ' 25001 ' , ' 50000 ' )));
// mighty Validator with XDebug disabled
[ // required&integer
' preparationTime ' => ' 1.32ms ' , // the time required to build the array
' validationTime ' => ' 1107.29ms ' , // the time required to validate the array
' totalTime ' => ' 1108.61ms ' , // the time required for the whole process
]
// mighty Validator with XDebug enabled
[ // required&integer
' preparationTime ' => ' 9.09ms ' ,
' validationTime ' => ' 6085.04ms ' ,
' totalTime ' => ' 6094.13ms ' ,
]
// Laravel Validator with XDebug disabled
[ // required|integer
' preparationTime ' => ' 1.33ms ' ,
' validationTime ' => ' 13882.72ms ' ,
' totalTime ' => ' 13884.05ms ' ,
]
// Laravel Validator with XDebug enabled
[ // required|integer
' preparationTime ' => ' 9.33ms ' ,
' validationTime ' => ' 24010.60ms ' ,
' totalTime ' => ' 24019.93ms ' ,
]
因此, mighty速度比禁用Xdebug的Laravel驗證器快的速度約為12.5倍,並且啟用Xdebug的速度約為4倍。
基準是使用PHPBench完成的。這是一個快速概述:
PHPBench (1.2.6) running benchmarks...
with configuration file: mighty /phpbench.json.dist
with PHP version 8.1.9, xdebug , opcache
MAKS mighty BenchmarksConstraintBench
benchAValidValidatableObject............I4 ✔ Mo305.595074ops/s (±0.75%)
benchAnInvalidValidatableObject.........I4 ✔ Mo326.708522ops/s (±1.02%)
MAKS mighty BenchmarksValidatorBench
benchSingleValidationString.............I4 ✔ Mo0.02212ms (±1.59%)
benchSingleValidationObject.............I4 ✔ Mo0.126929ms (±1.63%)
benchBulkValidationObject...............I4 ✔ Mo9.345847ms (±0.62%)
benchBulkValidationString...............I4 ✔ Mo6.734188ms (±0.40%)
Subjects: 6, Assertions: 6, Failures: 0, Errors: 0
事實:最新的基準結果也可以在CI管道中找到,該管道將在每個推送/PR上更新到上層。
MAKS mighty Rule::setMessageTranslator()
方法。此方法是設定全域訊息轉換器的便捷方法,它需要封閉,該封閉將原始訊息(帶有佔位符)作為參數,並且必須傳回該訊息的翻譯版本。mighty是根據MIT許可證許可的開源專案。
版權(C)2022 Marwan al-Soltany。版權所有。