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

PHP中的數據驗證,使用respect/validation

ati ron 而不是 基本上 info als int() com option

簡介

數據的驗證(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/

PHP中的數據驗證,使用respect/validation