1. 程式人生 > >PHP中的資料驗證,使用respect/validation

PHP中的資料驗證,使用respect/validation

簡介

資料的驗證(validation)是經常用的一個操作,通常是使用正則表示式的方式進行驗證。但是,“當你嘗試使用正則表示式解決一個問題時候,那麼,現在你有兩個問題了。”

 

PHP5.2.0以後內建了一個filter 擴充套件可以用於資料的過濾和淨化,這個內建擴充套件的最大問題是功能太弱,能驗證的東西太少。基本上就是驗證一下ip url 郵件地址,別的就沒有了,簡單用用還是可以可以的,複雜的功能就別指望了。

 

這裡將要介紹的respect/validation是一個PHP的驗證庫,在githubcomposerpackagist上都是同類中星星最多的。

特點:

1 使用簡單,支援鏈式操作,可以組合不同的驗證規則,支援對物件、陣列等組合資料形式的驗證。

2 內容豐富,可以驗證的資料型別非常多,包含了大部分的常見驗證:

 

 

 

安裝

Composer 安裝

respect/validation 已經提交到Packagist,可以直接使用composer下載:

composer require respect/validation

Packagist國內慢的幾乎不能用,可以換一個映象或者搭高速梯子。

基本使用

Helloword

建立一個驗證類的例項,然後呼叫validate方法,validate

方法返回true或者false

驗證數字:

use Respect\Validation\Validator as v;

$number = 123;v::numeric()->validate($number); //true

鏈式驗證(awesome

最方便強大的feature就是鏈式的驗證操作:

 

驗證日期處於某個範圍內

v::date('Y-m-d')->between('1980-02-02', 'now')->validate('1988-08-08');

Date between 是不同的rule,第一個

date('Y-m-d')負責驗證日期格式正確,後面的between負責驗證在區間內。

 

驗證一個不包含空格,長度在1-15之間的字串:

$usernameValidator = v::alnum()->noWhitespace()->length(1,15);

$usernameValidator->validate('alganet'); //true

 

等等。

 

Input optional

 

注意,預設情況下,除非文件特別說明,驗證函式預設引數是可選的,所以空輸入都會得到true的驗證結果。可以使用notEmpty()來禁止這個行為。驗證字串不為空:

v::alnum()->notEmpty()->validate(''); //false

 

實際上在這裡你可能需要更加的小心的驗證,例如domain這個rule,就不符合:

v::domain()->validate(''); //true

上面的驗證結果會是true,而不是false

規則反轉

v::not(v::int())->validate(10); //false, input must not be integer

 

獲取驗證失敗資訊

驗證一共有3個可用的函式validateassertcheckvalidate返回true或者falseassertcheck則能夠丟擲異常,異常資訊中攜帶具體的錯誤資訊。

如果驗證通過,assert函式返回true,驗證不通過則丟擲異常。

具體使用參考文件。

參考

1  GithubRespect/Validation

2  官網:http://respect.li/Validation/