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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM