PHP驗證器類Validator


Particle\Validator是一個小巧優雅的實用的PHP驗證類庫,提供了一個非常簡潔的API。它無需依賴其他組件,提供友好的文檔,並且有利於擴展。

安裝

 composer require particle/validator

使用

在使用之前請確保在項目中引入了 vendor/autoload.php 文件

Code:
	1. <?php 
	2. use Particle\Validator\Validator;
	3. require './vendor/autoload.php';
	4. $v = new Validator;
	5. $v->required('first_name')->lengthBetween(2, 30)->alpha();
	6. $v->required('last_name')->lengthBetween(2, 40)->alpha();
	7. $data = [
	8. 'first_name' => 'John',
	9. 'last_name' => 'Doe',
	10. ];
	11. $result = $v->validate($data);
	12. $result->isValid();  // 返回bool(true or false)

這個方法是內置的,主要用於檢測某個key的值,如果希望檢測的某個值可能為空,而希望驗證通過,則我們可以設置該方法的第三個參數為true。(默認值為false 代表不能為空值)。其中 required 和 optional 的區別主要是如下 required 是驗證的值必須存在;而 optional 是可選的,如果key存在,則驗證,不存在,則不用驗證。

數組方式驗證

Code:
	1. // 基本驗證
	2. $values = [
	3. 'user' => [
	4. 'username' => 'bob', 
	5. ]
	6. ];
	7. $v = new Validator;
	8. $v->required('user.username')->alpha();
	9. $result = $v->validate($values);
	10. $result->getValues() === $values; // bool(true)

內置驗證規則\

allowEmpty(callable $callback)是否可以為空值,true則通過 反之亦然

Code:
	1. $v = new Validator;
	2. // 如果用戶名存在,則驗證通過
	3. $v->required('name')->allowEmpty(function (array $values) {
	4. return $values['namePresent'] === true;
	5. });
	6. $v->validate(['namePresent' => true, 'name' => 'John'])->isValid(); // true
	7. $v->validate(['namePresent' => true])->isValid(); // true
	8. $v->validate(['namePresent' => false])->isValid(); // false

alnum($allowWhitespace = false) 包含數字和字母,不允許空格,(a-z, A-Z, 0-9)
alpha($allowWhitespace = false) 驗證的字符包含 (a-z, A-Z),不允許空格。
between($min, $max) 驗證必須在一個數值范圍,如(12, 34)。
bool() 布爾Boolean值驗證。
callback(callable $callable) 回調驗證。
creditCard() 驗證信用卡,驗證之前必須先安裝 composer require byrokrat/checkdigit。
datetime($format = null) 驗證日期。
digits() 一串數字字符串驗證,不包含小數。
each(callable $callable) 遍歷驗證。
email() 驗證郵箱。
equals($value) 驗證是否相等。
float()驗證浮點數。
greaterThan($value) 大於某個值。
hash($hashAlgorithm, $allowUppercase = false) md5 sha1等驗證。
inArray(array $array, $strict = true) 驗證是否屬於數組范圍內
integer($strict = false) 整數驗證。
isArray() 數組驗證。
json()json格式字符串驗證。
length($length) 長度驗證。
lengthBetween($min, $max) 長度范圍驗證。
lessThan($value) 小於驗證。
numeric() 驗證浮點數和整數。
phone($countryCode) 驗證手機號,使用之前先安裝 composer require giggsey/libphonenumber-for-php。
regex($regex) 正則驗證。
required(callable $callback) 必須存在,不能為空。
string() 字符串驗證。
url($schemes = []) 驗證URL。
uuid($version = Uuid::VALID_FORMAT) 驗證UUID。
提示信息覆蓋
Particle\Validator為默認規則提供了默認的消息提示,當然你也可以為驗證規則設置特定的消息提示以覆蓋默認值。

Code:
	1. $v = new Validator;
	2. $v->required('first_name')->lengthBetween(0, 5);
	3. $v->required('last_name')->lengthBetween(0, 5);
	4. $v->overwriteDefaultMessages([
	5. LengthBetween::TOO_LONG => 'It\'s too long, that value'
	6. ]);
	7. $v->overwriteMessages([
	8. 'first_name' => [
	9. LengthBetween::TOO_LONG => 'First name is too long, mate'
	10. ]
	11. ]);
	12. $result = $v->validate([
	13. 'first_name' => 'this is too long',
	14. 'last_name' => 'this is also too long',
	15. ]);
	16. var_dump($result->getMessages());

驗證場景

驗證庫一般都可以根據場景來使用不同的驗證,比如插入數據和更新數據的區別

Code:
	1. $v = new Validator;
	2. // 定義一個插入時候的驗證規則
	3. $v->context('insert', function(Validator $context) {
	4. $context->required('first_name')->lengthBetween(2, 30);
	5. });
	6. // 定義一個更新時候的驗證規則
	7. $v->context('update', function(Validator $context) {
	8. $context->optional('first_name')->lengthBetween(2, 30);
	9. });
	10. $v->validate([], 'update')->isValid(); // bool(true)
	11. $v->validate([], 'insert')->isValid(); // bool(false), because first_name is required.

在MVC架構中使用驗證器

很多時候,我們的項目都是進行分層開發的,例如常見的MVC,則我們可以在分層項目中調用該驗證類,示例如下:

Code:
	1. use Particle\Validator\ValidationResult;
	2. use Particle\Validator\Validator;
	3. class MyEntity 
	4. {
	5. protected $id;
	6. public function setId($id)
	7. {
	8. $this->id = $id;
	9. return $this;
	10. }
	11. public function validate() {
	12. $v = new Validator;
	13. $v->required('id')->integer();
	14. return new $v->validate($this->values());
	15. }
	16. protected function values()
	17. {
	18. return [
	19. 'id' => $this->id,
	20. ];
	21. }
	22. }
	23. // in a controller:
	24. $entity = new Entity();
	25. $entity->setId($this->getParam('id'));
	26. $result = $entity->validate();
	27. if (!$result->isValid()) {
	28. return $this->renderTemplate([
	29. 'messages' => $result->getMessages() // or maybe even just pass in $result.
	30. ]);
	31. }

http://validator.particle-php.com/en/latest/


免責聲明!

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



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