Valitron — это простая, минимальная и элегантная автономная библиотека проверки без каких-либо зависимостей. Valitron использует простые и понятные методы проверки с упором на читаемый и краткий синтаксис. Valitron — это простая и практичная библиотека проверки, которую вы так долго искали.
Получите поддержку vlucas/valitron с подпиской Tidelift
Valitron был создан из-за разочарования в других библиотеках проверки, которые зависят от крупных компонентов из других платформ, таких как HttpFoundation от Symfony, и включают в себя массу дополнительных файлов, которые на самом деле не нужны для базовой проверки. Он также имеет намеренно простой синтаксис, используемый для запуска всех проверок за один вызов, вместо индивидуальной проверки каждого значения путем создания экземпляров новых классов и проверки значений по одному, как того требуют некоторые другие библиотеки проверки.
Короче говоря, Valitron — это все, что вы искали в библиотеке проверки, но не смогли найти до сих пор: простой прагматичный синтаксис, легкий, понятный код, расширяемый для пользовательских обратных вызовов и проверок, хорошо протестированный и не имеющий зависимостей. . Давайте начнем.
Valitron использует Composer для установки и обновления:
curl -s http://getcomposer.org/installer | php
php composer.phar require vlucas/valitron
В примерах ниже используется синтаксис PHP 5.4, но Valitron работает на PHP 5.3+.
Использование простое и понятное. Просто укажите массив данных, которые вы хотите проверить, добавьте несколько правил и затем вызовите validate()
. Если есть какие-либо ошибки, вы можете вызвать errors()
чтобы получить их.
$ v = new Valitron Validator ( array ( ' name ' => ' Chester Tester ' ));
$ v -> rule ( ' required ' , ' name ' );
if ( $ v -> validate ()) {
echo " Yay! We're all good! " ;
} else {
// Errors
print_r ( $ v -> errors ());
}
Используя этот формат, вы можете напрямую и легко проверять данные $_POST
и даже применять правило, подобное required
к массиву полей:
$ v = new Valitron Validator ( $ _POST );
$ v -> rule ( ' required ' , [ ' name ' , ' email ' ]);
$ v -> rule ( ' email ' , ' email ' );
if ( $ v -> validate ()) {
echo " Yay! We're all good! " ;
} else {
// Errors
print_r ( $ v -> errors ());
}
Вы можете использовать синтаксис точки для доступа к элементам многомерных массивов и звездочку для проверки каждого члена массива:
$ v = new Valitron Validator ( array ( ' settings ' => array (
array ( ' threshold ' => 50 ),
array ( ' threshold ' => 90 )
)));
$ v -> rule ( ' max ' , ' settings.*.threshold ' , 100 );
if ( $ v -> validate ()) {
echo " Yay! We're all good! " ;
} else {
// Errors
print_r ( $ v -> errors ());
}
Или используйте точечный синтаксис для проверки всех членов числового массива:
$ v = new Valitron Validator ( array ( ' values ' => array ( 50 , 90 )));
$ v -> rule ( ' max ' , ' values.* ' , 100 );
if ( $ v -> validate ()) {
echo " Yay! We're all good! " ;
} else {
// Errors
print_r ( $ v -> errors ());
}
Вы также можете получить доступ к вложенным значениям, используя точечную запись:
$ v = new Valitron Validator ( array ( ' user ' => array ( ' first_name ' => ' Steve ' , ' last_name ' => ' Smith ' , ' username ' => ' Batman123 ' )));
$ v -> rule ( ' alpha ' , ' user.first_name ' )-> rule ( ' alpha ' , ' user.last_name ' )-> rule ( ' alphaNum ' , ' user.username ' );
if ( $ v -> validate ()) {
echo " Yay! We're all good! " ;
} else {
// Errors
print_r ( $ v -> errors ());
}
Глобальная настройка языка и языкового каталога:
// boot or config file
use Valitron Validator as V ;
V:: langDir ( __DIR__ . ' /validator_lang ' ); // always set langDir before lang.
V:: lang ( ' ar ' );
Отключение имени {поля} в выводе сообщения об ошибке.
use Valitron Validator as V ;
$ v = new Valitron Validator ([ ' name ' => ' John ' ]);
$ v -> rule ( ' required ' , [ ' name ' ]);
// Disable prepending the labels
$ v -> setPrependLabels ( false );
// Error output for the "false" condition
[
[ " name " ] => [
" is required "
]
]
// Error output for the default (true) condition
[
[ " name " ] => [
" name is required "
]
]
Вы можете условно требовать значения, используя необходимые условные правила. В этом примере для аутентификации нам требуется либо токен, если адрес электронной почты и пароль отсутствуют, либо пароль, если адрес электронной почты присутствует.
// this rule set would work for either data set...
$ data = [ ' email ' => ' [email protected] ' , ' password ' => ' mypassword ' ];
// or...
$ data = [ ' token ' => ' jashdjahs83rufh89y38h38h ' ];
$ v = new Valitron Validator ( $ data );
$ v -> rules ([
' requiredWithout ' => [
[ ' token ' , [ ' email ' , ' password ' ], true ]
],
' requiredWith ' => [
[ ' password ' , [ ' email ' ]]
],
' email ' => [
[ ' email ' ]
]
' optional ' => [
[ ' email ' ]
]
]);
$ this -> assertTrue ( $ v -> validate ());
required
- Поле обязательноrequiredWith
— поле обязательно, если присутствуют какие-либо другие поля.requiredWithout
— поле обязательно, если какие-либо другие поля НЕТ.equals
— поле должно совпадать с другим полем (подтверждение адреса электронной почты/пароля)different
— поле должно отличаться от другого поля.accepted
— флажок или радио должно быть принято (да, включено, 1, правда)numeric
– должен быть числовым.integer
— должно быть целым числом.boolean
— должно быть логическим значениемarray
— должен быть массивомlength
— строка должна быть определенной длины.lengthBetween
— строка должна находиться между заданными длинами.lengthMin
— строка должна быть больше заданной длины.lengthMax
— строка должна быть меньше заданной длины.min
- Минимумmax
- МаксимумlistContains
— выполняет проверку in_array для заданных значений массива (наоборот, чем in
)in
— выполняет проверку in_array для заданных значений массива.notIn
— отрицание in
правиле (не в массиве значений)ip
- Действительный IP-адресipv4
— действительный IP-адрес v4.ipv6
— действительный IP-адрес v6.email
- действительный адрес электронной почтыemailDNS
— действительный адрес электронной почты с активной записью DNS.url
- Действительный URLurlActive
— действительный URL-адрес с активной записью DNS.alpha
– только алфавитные символыalphaNum
— только буквенные и цифровые символы.ascii
— только символы ASCIIslug
— символы URL-адреса (az, 0–9, -, _)regex
— поле соответствует заданному шаблону регулярного выражения.date
— поле содержит действительную дату.dateFormat
— поле представляет собой действительную дату в заданном формате.dateBefore
— поле содержит действительную дату и предшествует указанной дате.dateAfter
— поле является допустимой датой и находится после указанной даты.contains
— поле представляет собой строку и содержит заданную строку.subset
— поле представляет собой массив или скаляр, и все элементы содержатся в данном массиве.containsUnique
— поле представляет собой массив и содержит уникальные значения.creditCard
— поле представляет собой действительный номер кредитной карты.instanceOf
— поле содержит экземпляр данного класса.optional
— значение не обязательно включать в массив данных. Однако если это так, он должен пройти проверку.arrayHasKeys
— поле представляет собой массив и содержит все указанные ключи.ПРИМЕЧАНИЕ . Если вы сравниваете числа с плавающей запятой с валидаторами минимального/максимального значения, вам следует установить расширение BCMath для большей точности и надежности. Расширение не требуется для работы Valitron, но Valitron будет использовать его, если оно доступно, и это настоятельно рекомендуется.
required
правило проверяет, существует ли поле в массиве данных, не является ли оно нулевым или пустой строкой.
$ v -> rule ( ' required ' , ' field_name ' );
Используя дополнительный параметр, вы можете сделать это правило более гибким и проверять только наличие поля в массиве данных.
$ v -> rule ( ' required ' , ' field_name ' , true );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' spiderman ' , ' password ' => ' Gr33nG0Blin ' , ' required_but_null ' => null ]);
$ v -> rules ([
' required ' => [
[ ' username ' ],
[ ' password ' ],
[ ' required_but_null ' , true ] // boolean flag allows empty value so long as the field name is set on the data array
]
]);
$ v -> validate ();
Правило requiredWith
проверяет, что поле является обязательным, а не null и не является пустой строкой, если присутствуют какие-либо другие поля, не null и не пустая строка.
// password field will be required when the username field is provided and not empty
$ v -> rule ( ' requiredWith ' , ' password ' , ' username ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' spiderman ' , ' password ' => ' Gr33nG0Blin ' ]);
$ v -> rules ([
' requiredWith ' => [
[ ' password ' , ' username ' ]
]
]);
$ v -> validate ();
Примечание. Вы можете указать несколько значений в виде массива. В этом случае, если ЛЮБОЕ из полей присутствует, оно будет обязательным.
// in this case the password field will be required if the username or email fields are present
$ v -> rule ( ' requiredWith ' , ' password ' , [ ' username ' , ' email ' ]);
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' spiderman ' , ' password ' => ' Gr33nG0Blin ' ]);
$ v -> rules ([
' requiredWith ' => [
[ ' password ' , [ ' username ' , ' email ' ]]
]
]);
$ v -> validate ();
Строгий флаг изменит правило requiredWith
на requiredWithAll
, которое будет требовать поле только в том случае, если присутствуют ВСЕ другие поля, а не null и не пустая строка.
// in this example the suffix field is required only when both the first_name and last_name are provided
$ v -> rule ( ' requiredWith ' , ' suffix ' , [ ' first_name ' , ' last_name ' ], true );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' first_name ' => ' steve ' , ' last_name ' => ' holt ' , ' suffix ' => ' Mr ' ]);
$ v -> rules ([
' requiredWith ' => [
[ ' suffix ' , [ ' first_name ' , ' last_name ' ], true ]
]
]);
$ v -> validate ();
Аналогично, в этом случае validate()
по-прежнему будет возвращать значение true, поскольку поле суффикса не потребуется в строгом режиме, поскольку не все поля предоставляются.
$ v = new Valitron Validator ([ ' first_name ' => ' steve ' ]);
$ v -> rules ([
' requiredWith ' => [
[ ' suffix ' , [ ' first_name ' , ' last_name ' ], true ]
]
]);
$ v -> validate ();
Правило requiredWithout
проверяет, что поле является обязательным, а не пустым и не является пустой строкой, если какие-либо другие поля НЕ присутствуют.
// this rule will require the username field when the first_name is not present
$ v -> rule ( ' requiredWithout ' , ' username ' , ' first_name ' )
Альтернативный синтаксис.
// this will return true, as the username is provided when the first_name is not provided
$ v = new Valitron Validator ([ ' username ' => ' spiderman ' ]);
$ v -> rules ([
' requiredWithout ' => [
[ ' username ' , ' first_name ' ]
]
]);
$ v -> validate ();
Примечание. Вы можете указать несколько значений в виде массива. В этом случае, если НИКАКОГО из полей НЕТ, это поле будет обязательным.
// in this case the username field will be required if either the first_name or last_name fields are not present
$ v -> rule ( ' requiredWithout ' , ' username ' , [ ' first_name ' , ' last_name ' ]);
Альтернативный синтаксис.
// this passes validation because although the last_name field is not present, the username is provided
$ v = new Valitron Validator ([ ' username ' => ' spiderman ' , ' first_name ' => ' Peter ' ]);
$ v -> rules ([
' requiredWithout ' => [
[ ' username ' , [ ' first_name ' , ' last_name ' ]]
]
]);
$ v -> validate ();
Строгий флаг изменит правило requiredWithout
на requiredWithoutAll
, которое будет требовать это поле только в том случае, если ВСЕ другие поля отсутствуют.
// in this example the username field is required only when both the first_name and last_name are not provided
$ v -> rule ( ' requiredWithout ' , ' username ' , [ ' first_name ' , ' last_name ' ], true );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' BatMan ' ]);
$ v -> rules ([
' requiredWithout ' => [
[ ' username ' , [ ' first_name ' , ' last_name ' ], true ]
]
]);
$ v -> validate ();
Аналогично, в этом случае validate()
по-прежнему будет возвращать значение true, поскольку поле имени пользователя не будет обязательным в строгом режиме, поскольку все поля предоставляются.
$ v = new Valitron Validator ([ ' first_name ' => ' steve ' , ' last_name ' => ' holt ' ]);
$ v -> rules ([
' requiredWithout ' => [
[ ' suffix ' , [ ' first_name ' , ' last_name ' ], true ]
]
]);
$ v -> validate ();
Правило equals
проверяет, равны ли два поля в массиве данных и не является ли второе поле нулевым.
$ v -> rule ( ' equals ' , ' password ' , ' confirmPassword ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' password ' => ' youshouldnotseethis ' , ' confirmPassword ' => ' youshouldnotseethis ' ]);
$ v -> rules ([
' equals ' => [
[ ' password ' , ' confirmPassword ' ]
]
]);
$ v -> validate ();
different
правило проверяет, не являются ли два поля одинаковыми или разными в массиве данных и не является ли второе поле нулевым.
$ v -> rule ( ' different ' , ' username ' , ' password ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' spiderman ' , ' password ' => ' Gr33nG0Blin ' ]);
$ v -> rules ([
' different ' => [
[ ' username ' , ' password ' ]
]
]);
$ v -> validate ();
accepted
правило проверяет, имеет ли поле значение «да», «включено», 1 или true.
$ v -> rule ( ' accepted ' , ' remember_me ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' remember_me ' => true ]);
$ v -> rules ([
' accepted ' => [
[ ' remember_me ' ]
]
]);
$ v -> validate ();
numeric
правило проверяет, является ли поле числовым. Это аналогично функции PHP is_numeric().
$ v -> rule ( ' numeric ' , ' amount ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' amount ' => 3.14 ]);
$ v -> rules ([
' numeric ' => [
[ ' amount ' ]
]
]);
$ v -> validate ();
integer
правило проверяет, является ли поле целым числом.
$ v -> rule ( ' integer ' , ' age ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' age ' => ' 27 ' ]);
$ v -> rules ([
' integer ' => [
[ ' age ' ]
]
]);
$ v -> validate ();
Обратите внимание, что дополнительный логический флаг для строгого режима гарантирует, что целые числа будут предоставлены в строго числовой форме. Таким образом, следующее правило будет считаться истинным:
$ v = new Valitron Validator ([ ' negative ' => ' -27 ' , ' positive ' => ' 27 ' ]);
$ v -> rule ( ' integer ' , ' age ' , true );
$ v -> rule ( ' integer ' , ' height ' , true );
$ v -> validate ();
Принимая во внимание, что следующее будет иметь значение false, поскольку + для положительного числа в этом случае является избыточным:
$ v = new Valitron Validator ([ ' negative ' => ' -27 ' , ' positive ' => ' +27 ' ]);
$ v -> rule ( ' integer ' , ' age ' , true );
$ v -> rule ( ' integer ' , ' height ' , true );
$ v -> validate ();
boolean
правило проверяет, является ли поле логическим значением. Это аналогично функции PHP is_bool().
$ v -> rule ( ' boolean ' , ' remember_me ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' remember_me ' => true ]);
$ v -> rules ([
' boolean ' => [
[ ' remember_me ' ]
]
]);
$ v -> validate ();
Правило array
проверяет, является ли поле массивом. Это аналогично функции PHP is_array().
$ v -> rule ( ' array ' , ' user_notifications ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' user_notifications ' => [ ' bulletin_notifications ' => true , ' marketing_notifications ' => false , ' message_notification ' => true ]]);
$ v -> rules ([
' array ' => [
[ ' user_notifications ' ]
]
]);
$ v -> validate ();
Правило length
проверяет, имеет ли поле заданную длину и является ли оно допустимой строкой.
$ v -> rule ( ' length ' , ' username ' , 10 );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' bobburgers ' ]);
$ v -> rules ([
' length ' => [
[ ' username ' , 10 ]
]
]);
$ v -> validate ();
Правило lengthBetween
проверяет, находится ли поле в пределах заданного диапазона длины и является ли поле допустимой строкой.
$ v -> rule ( ' lengthBetween ' , ' username ' , 1 , 10 );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' bobburgers ' ]);
$ v -> rules ([
' lengthBetween ' => [
[ ' username ' , 1 , 10 ]
]
]);
$ v -> validate ();
Правило lengthMin
проверяет, имеет ли поле хотя бы заданную длину и является ли оно допустимой строкой.
$ v -> rule ( ' lengthMin ' , ' username ' , 5 );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' martha ' ]);
$ v -> rules ([
' lengthMin ' => [
[ ' username ' , 5 ]
]
]);
$ v -> validate ();
Правило lengthMax
проверяет, имеет ли поле заданную длину и является ли оно допустимой строкой.
$ v -> rule ( ' lengthMax ' , ' username ' , 10 );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' bruins91 ' ]);
$ v -> rules ([
' lengthMax ' => [
[ ' username ' , 10 ]
]
]);
$ v -> validate ();
Правило min
проверяет, имеет ли поле хотя бы заданное значение и является ли указанное значение числовым.
$ v -> rule ( ' min ' , ' age ' , 18 );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' age ' => 28 ]);
$ v -> rules ([
' min ' => [
[ ' age ' , 18 ]
]
]);
$ v -> validate ();
Правило max
проверяет, имеет ли поле не более заданное значение и является ли предоставленное значение числовым.
$ v -> rule ( ' max ' , ' age ' , 12 );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' age ' => 10 ]);
$ v -> rules ([
' max ' => [
[ ' age ' , 12 ]
]
]);
$ v -> validate ();
Правило listContains
проверяет наличие поля в заданном массиве значений.
$ v -> rule ( ' listContains ' , ' color ' , ' yellow ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' color ' => [ ' blue ' , ' green ' , ' red ' , ' yellow ' ]]);
$ v -> rules ([
' listContains ' => [
[ ' color ' , ' yellow ' ]
]
]);
$ v -> validate ();
Правило in
проверяет наличие поля в заданном массиве значений.
$ v -> rule ( ' in ' , ' color ' , [ ' blue ' , ' green ' , ' red ' , ' purple ' ]);
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' color ' => ' purple ' ]);
$ v -> rules ([
' in ' => [
[ ' color ' , [ ' blue ' , ' green ' , ' red ' , ' purple ' ]]
]
]);
$ v -> validate ();
Правило notIn
проверяет, что поле НЕ присутствует в заданном массиве значений.
$ v -> rule ( ' notIn ' , ' color ' , [ ' blue ' , ' green ' , ' red ' , ' yellow ' ]);
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' color ' => ' purple ' ]);
$ v -> rules ([
' notIn ' => [
[ ' color ' , [ ' blue ' , ' green ' , ' red ' , ' yellow ' ]]
]
]);
$ v -> validate ();
Правило ip
проверяет, что поле является действительным IP-адресом. Сюда входят IPv4, IPv6, частные и зарезервированные диапазоны.
$ v -> rule ( ' ip ' , ' user_ip ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' user_ip ' => ' 127.0.0.1 ' ]);
$ v -> rules ([
' ip ' => [
[ ' user_ip ' ]
]
]);
$ v -> validate ();
Правило ipv4
проверяет, является ли поле действительным адресом IPv4.
$ v -> rule ( ' ipv4 ' , ' user_ip ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' user_ip ' => ' 127.0.0.1 ' ]);
$ v -> rules ([
' ipv4 ' => [
[ ' user_ip ' ]
]
]);
$ v -> validate ();
Правило ipv6
проверяет, является ли поле действительным адресом IPv6.
$ v -> rule ( ' ipv6 ' , ' user_ip ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' user_ip ' => ' 0:0:0:0:0:0:0:1 ' ]);
$ v -> rules ([
' ipv6 ' => [
[ ' user_ip ' ]
]
]);
$ v -> validate ();
Правило email
проверяет, что поле является действительным адресом электронной почты.
$ v -> rule ( ' email ' , ' user_email ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' user_email ' => ' [email protected] ' ]);
$ v -> rules ([
' email ' => [
[ ' user_email ' ]
]
]);
$ v -> validate ();
Правило emailDNS
проверяет, является ли поле действительным адресом электронной почты с активной записью DNS или любого типа.
$ v -> rule ( ' emailDNS ' , ' user_email ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' user_email ' => ' [email protected] ' ]);
$ v -> rules ([
' emailDNS ' => [
[ ' user_email ' ]
]
]);
$ v -> validate ();
Правило url
проверяет, что поле является действительным URL-адресом.
$ v -> rule ( ' url ' , ' website ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' website ' => ' https://example.com/contact ' ]);
$ v -> rules ([
' url ' => [
[ ' website ' ]
]
]);
$ v -> validate ();
Правило urlActive
проверяет, что поле является действительным URL-адресом с активной записью A, AAAA или CNAME.
$ v -> rule ( ' urlActive ' , ' website ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' website ' => ' https://example.com/contact ' ]);
$ v -> rules ([
' urlActive ' => [
[ ' website ' ]
]
]);
$ v -> validate ();
Правило alpha
проверяет, что поле содержит только буквенные символы.
$ v -> rule ( ' alpha ' , ' username ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' batman ' ]);
$ v -> rules ([
' alpha ' => [
[ ' username ' ]
]
]);
$ v -> validate ();
Правило alphaNum
проверяет, что поле содержит только буквенные или цифровые символы.
$ v -> rule ( ' alphaNum ' , ' username ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' batman123 ' ]);
$ v -> rules ([
' alphaNum ' => [
[ ' username ' ]
]
]);
$ v -> validate ();
Правило ascii
проверяет, что поле содержит только символы из набора символов ascii.
$ v -> rule ( ' ascii ' , ' username ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' batman123 ' ]);
$ v -> rules ([
' ascii ' => [
[ ' username ' ]
]
]);
$ v -> validate ();
Правило slug
проверяет, содержит ли поле только символы слага URL-адреса (az, 0–9, -, _).
$ v -> rule ( ' slug ' , ' username ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' L337-H4ckZ0rz_123 ' ]);
$ v -> rules ([
' slug ' => [
[ ' username ' ]
]
]);
$ v -> validate ();
Правило regex
гарантирует, что поле соответствует заданному шаблону регулярного выражения. (Это регулярное выражение проверяет, является ли строка буквенно-цифровой длиной от 5 до 10 символов).
$ v -> rule ( ' regex ' , ' username ' , ' /^[a-zA-Z0-9]{5,10}$/ ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' Batman123 ' ]);
$ v -> rules ([
' regex ' => [
[ ' username ' , ' /^[a-zA-Z0-9]{5,10}$/ ' ]
]
]);
$ v -> validate ();
Правило date
проверяет, является ли предоставленное поле допустимым объектом DateTime или можно ли преобразовать строку в временную метку Unix с помощью strtotime().
$ v -> rule ( ' date ' , ' created_at ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' created_at ' => ' 2018-10-13 ' ]);
$ v -> rules ([
' date ' => [
[ ' created_at ' ]
]
]);
$ v -> validate ();
Правило dateFormat
проверяет, что предоставленное поле является допустимой датой в указанном формате даты.
$ v -> rule ( ' dateFormat ' , ' created_at ' , ' Y-m-d ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' created_at ' => ' 2018-10-13 ' ]);
$ v -> rules ([
' dateFormat ' => [
[ ' created_at ' , ' Y-m-d ' ]
]
]);
$ v -> validate ();
Правило dateBefore
проверяет, является ли указанное поле действительной датой до указанной даты.
$ v -> rule ( ' dateBefore ' , ' created_at ' , ' 2018-10-13 ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' created_at ' => ' 2018-09-01 ' ]);
$ v -> rules ([
' dateBefore ' => [
[ ' created_at ' , ' 2018-10-13 ' ]
]
]);
$ v -> validate ();
Правило dateAfter
проверяет, является ли указанное поле допустимой датой после указанной даты.
$ v -> rule ( ' dateAfter ' , ' created_at ' , ' 2018-10-13 ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' created_at ' => ' 2018-09-01 ' ]);
$ v -> rules ([
' dateAfter ' => [
[ ' created_at ' , ' 2018-01-01 ' ]
]
]);
$ v -> validate ();
Правило contains
проверяет, существует ли данная строка в поле, а также проверяет, являются ли поле и искомое значение допустимыми строками.
$ v -> rule ( ' contains ' , ' username ' , ' man ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' username ' => ' Batman123 ' ]);
$ v -> rules ([
' contains ' => [
[ ' username ' , ' man ' ]
]
]);
$ v -> validate ();
Примечание. Вы можете использовать дополнительный флаг strict, чтобы обеспечить соответствие с учетом регистра. Следующий пример вернет true:
$ v = new Valitron Validator ([ ' username ' => ' Batman123 ' ]);
$ v -> rules ([
' contains ' => [
[ ' username ' , ' man ' ]
]
]);
$ v -> validate ();
Принимая во внимание, что это вернет false, поскольку буква M в строке поиска не указана в верхнем регистре в предоставленном значении:
$ v = new Valitron Validator ([ ' username ' => ' Batman123 ' ]);
$ v -> rules ([
' contains ' => [
[ ' username ' , ' Man ' , true ]
]
]);
$ v -> validate ();
Правило subset
проверяет, является ли поле скалярным или массивным и что все его значения содержатся в заданном наборе значений.
$ v -> rule ( ' subset ' , ' colors ' , [ ' green ' , ' blue ' , ' orange ' ]);
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' colors ' => [ ' green ' , ' blue ' ]]);
$ v -> rules ([
' subset ' => [
[ ' colors ' , [ ' orange ' , ' green ' , ' blue ' , ' red ' ]]
]
]);
$ v -> validate ();
Этот пример вернет значение false, поскольку указанный фиолетовый цвет не существует в предоставленном нами массиве принятых значений.
$ v = new Valitron Validator ([ ' colors ' => [ ' purple ' , ' blue ' ]]);
$ v -> rules ([
' subset ' => [
[ ' colors ' , [ ' orange ' , ' green ' , ' blue ' , ' red ' ]]
]
]);
$ v -> validate ();
Правило containsUnique
проверяет, что предоставленное поле является массивом и что все содержащиеся в нем значения уникальны, т. е. в массиве нет повторяющихся значений.
$ v -> rule ( ' containsUnique ' , ' colors ' );
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' colors ' => [ ' purple ' , ' blue ' ]]);
$ v -> rules ([
' containsUnique ' => [
[ ' colors ' ]
]
]);
$ v -> validate ();
Этот пример вернет значение false, поскольку значения в предоставленном массиве являются повторяющимися.
$ v = new Valitron Validator ([ ' colors ' => [ ' purple ' , ' purple ' ]]);
$ v -> rules ([
' containsUnique ' => [
[ ' colors ' ]
]
]);
$ v -> validate ();
Проверка кредитной карты в настоящее время позволяет вам подтвердить visa
Visa, Mastercard mastercard
, Dinersclub dinersclub
, American Express amex
или Discover discover
Это проверит кредитную карту по каждому типу карты.
$ v -> rule ( ' creditCard ' , ' credit_card ' );
Чтобы дополнительно отфильтровать типы карт, добавьте слаг в массив в качестве следующего параметра:
$ v -> rule ( ' creditCard ' , ' credit_card ' , [ ' visa ' , ' mastercard ' ]);
Если вы хотите проверить только один тип карты, укажите его в виде строки:
$ v -> rule ( ' creditCard ' , ' credit_card ' , ' visa ' );
Если информация о типе карты поступает от клиента, вы также можете указать массив допустимых типов карт:
$ cardType = ' amex ' ;
$ v -> rule ( ' creditCard ' , ' credit_card ' , $ cardType , [ ' visa ' , ' mastercard ' ]);
$ v -> validate (); // false
Правило instanceOf
проверяет, что поле является экземпляром данного класса.
$ v -> rule ( ' instanceOf ' , ' date ' , DateTime);
Альтернативный синтаксис.
$ v = new Valitron Validator ([ ' date ' => new DateTime ()]);
$ v -> rules ([
' instanceOf ' => [
[ ' date ' , ' DateTime ' ]
]
]);
$ v -> validate ();
Примечание. Вы также можете сравнить значение с заданным объектом, а не с именем класса строки. Этот пример также вернет true:
$ v = new Valitron Validator ([ ' date ' => new DateTime ()]);
$ existingDateObject = new DateTime ();
$ v -> rules ([
' instanceOf ' => [
[ ' date ' , $ existingDateObject ]
]
]);
$ v -> validate ();
optional
правило гарантирует, что если поле присутствует в наборе данных, оно соответствует всем правилам проверки.
$ v -> rule ( ' optional ' , ' username ' );
Альтернативный синтаксис. Этот пример вернет true либо в том случае, если поле «имя пользователя» отсутствует, либо в случае, когда имя пользователя состоит только из букв алфавита.
$ v = new Valitron Validator ([ ' username ' => ' batman ' ]);
$ v -> rules ([
' alpha ' => [
[ ' username ' ]
],
' optional ' => [
[ ' username ' ]
]
]);
$ v -> validate ();
В этом примере будет возвращено значение false, поскольку, хотя поле является необязательным, поскольку оно указано, оно должно пройти все правила проверки, чего в данном случае нет.
$ v = new Valitron Validator ([ ' username ' => ' batman123 ' ]);
$ v -> rules ([
' alpha ' => [
[ ' username ' ]
],
' optional ' => [
[ ' username ' ]
]
]);
$ v -> validate ();
Правило arrayHasKeys
гарантирует, что поле является массивом и содержит все указанные ключи. Возвращает false, если поле не является массивом, не указаны обязательные ключи или отсутствует какой-либо ключ.
$ v = new Valitron Validator ([
' address ' => [
' name ' => ' Jane Doe ' ,
' street ' => ' Doe Square ' ,
' city ' => ' Doe D.C. '
]
]);
$ v -> rule ( ' arrayHasKeys ' , ' address ' , [ ' name ' , ' street ' , ' city ' ]);
$ v -> validate ();
Чтобы добавить собственное правило проверки, используйте метод addRule
с именем правила, настраиваемым обратным вызовом или замыканием, а также сообщением об ошибке, которое будет отображаться в случае ошибки. Предоставленный обратный вызов должен возвращать логическое значение true или false.
Valitron Validator:: addRule ( ' alwaysFail ' , function ( $ field , $ value , array $ params , array $ fields ) {
return false ;
}, ' Everything you do is wrong. You fail. ' );
Вы также можете использовать разовые правила, действительные только для указанных полей.
$ v = new Valitron Validator ( array ( " foo " => " bar " ));
$ v -> rule ( function ( $ field , $ value , $ params , $ fields ) {
return true ;
}, " foo " )-> message ( " {field} failed... " );
Это полезно, поскольку такие правила могут иметь доступ к переменным, определенным в области, в которой находится Validator
. Подпись Closure идентична подписи обратного вызова Validator::addRule
.
Если вы хотите добавить свои собственные правила, которые не являются статическими (т. е. ваше правило не является статичным и доступно для вызова экземпляров Validator
), вам необходимо использовать Validator::addInstanceRule
. Это правило будет принимать те же параметры, что и Validator::addRule
, но его необходимо вызывать в экземпляре Validator
.
Вы можете объединить несколько правил, используя следующий синтаксис.
$ v = new Valitron Validator ([ ' email_address ' => ' [email protected] ' ]);
$ v -> rule ( ' required ' , ' email_address ' )-> rule ( ' email ' , ' email_address ' );
$ v -> validate ();
По мере роста количества правил вы можете предпочесть альтернативный синтаксис для одновременного определения нескольких правил.
$ rules = [
' required ' => ' foo ' ,
' accepted ' => ' bar ' ,
' integer ' => ' bar '
];
$ v = new Valitron Validator ( array ( ' foo ' => ' bar ' , ' bar ' => 1 ));
$ v -> rules ( $ rules );
$ v -> validate ();
Если вашему правилу требуется несколько параметров или один параметр, более сложный, чем строка, вам необходимо обернуть правило в массив.
$ rules = [
' required ' => [
[ ' foo ' ],
[ ' bar ' ]
],
' length ' => [
[ ' foo ' , 3 ]
]
];
Вы также можете указать несколько правил для каждого типа правил.
$ rules = [
' length ' => [
[ ' foo ' , 5 ],
[ ' bar ' , 5 ]
]
];
Объединив эти методы, вы можете создать полное определение правила в относительно компактной структуре данных.
Вы можете продолжать добавлять отдельные правила с помощью метода rule
даже после указания определения правила через массив. Это особенно полезно, если вы определяете собственные правила проверки.
$ rules = [
' required ' => ' foo ' ,
' accepted ' => ' bar ' ,
' integer ' => ' bar '
];
$ v = new Valitron Validator ( array ( ' foo ' => ' bar ' , ' bar ' => 1 ));
$ v -> rules ( $ rules );
$ v -> rule ( ' min ' , ' bar ' , 0 );
$ v -> validate ();
Вы также можете добавлять правила для каждого поля:
$ rules = [
' required ' ,
[ ' lengthMin ' , 4 ]
];
$ v = new Valitron Validator ( array ( ' foo ' => ' bar ' ));
$ v -> mapFieldRules ( ' foo ' , $ rules );
$ v -> validate ();
Или для нескольких полей одновременно:
$ rules = [
' foo ' => [ ' required ' , ' integer ' ],
' bar ' =>[ ' email ' , [ ' lengthMin ' , 4 ]]
];
$ v = new Valitron Validator(array( ' foo ' => ' bar ' , ' bar ' => '[email protected]));
$v->mapFieldsRules($rules);
$v->validate();
Это можно сделать двумя разными способами: добавить к правилу отдельную метку или массив всех меток для правил.
Чтобы добавить к правилу отдельную метку, просто добавьте метод label
после правила.
$ v = new Valitron Validator ( array ());
$ v -> rule ( ' required ' , ' name ' )-> message ( ' {field} is required ' )-> label ( ' Name ' );
$ v -> validate ();
У этого метода есть крайний случай: вы не сможете использовать массив имен полей в определении правила, поэтому на каждое поле по одному правилу. Так что это не сработает:
$ v = new Valitron Validator ( array ());
$ v -> rule ( ' required ' , array ( ' name ' , ' email ' ))-> message ( ' {field} is required ' )-> label ( ' Name ' );
$ v -> validate ();
Однако мы можем использовать массив меток для решения этой проблемы, просто добавив вместо этого метод labels
:
$ v = new Valitron Validator ( array ());
$ v -> rule ( ' required ' , array ( ' name ' , ' email ' ))-> message ( ' {field} is required ' );
$ v -> labels ( array (
' name ' => ' Name ' ,
' email ' => ' Email address '
));
$ v -> validate ();
Это вводит новый набор тегов в ваш языковой файл ошибок, который выглядит как {field}
. Если вы используете такое правило, как equals
вы можете получить доступ ко второму значению в языковом файле, увеличив поле на значение, например {field1}
.
Вы можете повторно использовать свои правила проверки, чтобы быстро проверять разные данные по одним и тем же правилам, используя метод withData:
$ v = new Valitron Validator ( array ());
$ v -> rule ( ' required ' , ' name ' )-> message ( ' {field} is required ' );
$ v -> validate (); //false
$ v2 = $ v -> withData ( array ( ' name ' => ' example ' ));
$ v2 -> validate (); //true
Набор тестов зависит от автозагрузчика Composer для загрузки и запуска файлов Valitron. Перед запуском тестов убедитесь, что вы загрузили и установили Composer:
curl -s http://getcomposer.org/installer | php
php composer.phar install
phpunit
git checkout -b my-new-feature
)phpunit
)git commit -am 'Added some feature'
)git push origin my-new-feature
)Чтобы сообщить об уязвимости безопасности, воспользуйтесь контактом службы безопасности Tidelift. Tidelift будет координировать исправление и раскрытие информации.