PHP中的資料驗證,使用respect/validation
簡介
資料的驗證(validation)是經常用的一個操作,通常是使用正則表示式的方式進行驗證。但是,“當你嘗試使用正則表示式解決一個問題時候,那麼,現在你有兩個問題了。”
PHP在5.2.0以後內建了一個filter 擴充套件可以用於資料的過濾和淨化,這個內建擴充套件的最大問題是功能太弱,能驗證的東西太少。基本上就是驗證一下ip url 郵件地址,別的就沒有了,簡單用用還是可以可以的,複雜的功能就別指望了。
這裡將要介紹的respect/validation是一個PHP的驗證庫,在github和composer的packagist上都是同類中星星最多的。
特點:
1 使用簡單,支援鏈式操作,可以組合不同的驗證規則,支援對物件、陣列等組合資料形式的驗證。
2 內容豐富,可以驗證的資料型別非常多,包含了大部分的常見驗證:
安裝
Composer 安裝
respect/validation 已經提交到Packagist,可以直接使用composer下載:
composer require respect/validation
Packagist國內慢的幾乎不能用,可以換一個映象或者搭高速梯子。
基本使用
Helloword
建立一個驗證類的例項,然後呼叫validate方法,validate
驗證數字:
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,第一個
驗證一個不包含空格,長度在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個可用的函式validate,assert,check,validate返回true或者false,assert和check則能夠丟擲異常,異常資訊中攜帶具體的錯誤資訊。
如果驗證通過,assert函式返回true,驗證不通過則丟擲異常。
具體使用參考文件。
參考
1 Github:Respect/Validation
2 官網:http://respect.li/Validation/