Merge pull request #284 from tobiashinz/listContains

List contains
This commit is contained in:
Willem Wollebrants 2019-08-21 12:16:21 +02:00 committed by GitHub
commit 76e44188e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 105 additions and 8 deletions

View File

@ -143,6 +143,7 @@ V::lang('ar');
* `lengthMax` - String must be less than given length * `lengthMax` - String must be less than given length
* `min` - Minimum * `min` - Minimum
* `max` - Maximum * `max` - Maximum
* `listContains` - Performs in_array check on given array values (the other way round than `in`)
* `in` - Performs in_array check on given array values * `in` - Performs in_array check on given array values
* `notIn` - Negation of `in` rule (not in array of values) * `notIn` - Negation of `in` rule (not in array of values)
* `ip` - Valid IP address * `ip` - Valid IP address
@ -443,6 +444,23 @@ $v->rules([
$v->validate(); $v->validate();
``` ```
## listContains fields usage
The `listContains` rule checks that the field is present in a given array of values.
```php
$v->rule('listContains', 'color', 'yellow');
```
Alternate syntax.
```php
$v = new Valitron\Validator(['color' => ['blue', 'green', 'red', 'yellow']]);
$v->rules([
'listContains' => [
['color', 'yellow']
]
]);
$v->validate();
```
## in fields usage ## in fields usage
The `in` rule checks that the field is present in a given array of values. The `in` rule checks that the field is present in a given array of values.
```php ```php
@ -1155,4 +1173,3 @@ before running the tests:
6. Push to the branch (`git push origin my-new-feature`) 6. Push to the branch (`git push origin my-new-feature`)
7. Create new Pull Request 7. Create new Pull Request
8. Pat yourself on the back for being so awesome 8. Pat yourself on the back for being so awesome

View File

@ -11,6 +11,7 @@ return array(
'min' => "يجب ان يكون اعلي من %s", 'min' => "يجب ان يكون اعلي من %s",
'max' => "يجب ان يكون اقل من %s", 'max' => "يجب ان يكون اقل من %s",
'in' => "الُمدخل يغير صحيح", 'in' => "الُمدخل يغير صحيح",
'listContains' => "الُمدخل يغير صحيح",
'notIn' => "الُمدخل يغير صحيح", 'notIn' => "الُمدخل يغير صحيح",
'ip' => "رقم الإتصال غير صحيح", 'ip' => "رقم الإتصال غير صحيح",
'email' => "البريد الألكتروني غير صحيح", 'email' => "البريد الألكتروني غير صحيح",

View File

@ -10,6 +10,7 @@ return array(
'length' => "%d qədər uzunluğu olmalıdır", 'length' => "%d qədər uzunluğu olmalıdır",
'min' => "minimum %s qədər olmalıdır", 'min' => "minimum %s qədər olmalıdır",
'max' => "maksimum %s qədər olmalıdır", 'max' => "maksimum %s qədər olmalıdır",
'listContains' => "yalnış dəyər ehtiva edir",
'in' => "yalnış dəyər ehtiva edir", 'in' => "yalnış dəyər ehtiva edir",
'notIn' => "yalnış dəyər ehtiva edir", 'notIn' => "yalnış dəyər ehtiva edir",
'ip' => "düzgün IP ünvanı deyil", 'ip' => "düzgün IP ünvanı deyil",

View File

@ -10,6 +10,7 @@ return array(
'length' => "трябва да бъде %d символа дълго", 'length' => "трябва да бъде %d символа дълго",
'min' => "трябвя да бъде поне %s", 'min' => "трябвя да бъде поне %s",
'max' => "трябва да бъде не повече от %s", 'max' => "трябва да бъде не повече от %s",
'listContains' => "съдържа невалидна стойност",
'in' => "съдържа невалидна стойност", 'in' => "съдържа невалидна стойност",
'notIn' => "съдържа невалидна стойност", 'notIn' => "съдържа невалидна стойност",
'ip' => "е невалиден IP адрес", 'ip' => "е невалиден IP адрес",

View File

@ -10,6 +10,7 @@ return array(
'length' => "kann nicht länger als %d sein", 'length' => "kann nicht länger als %d sein",
'min' => "muss größer als %s sein", 'min' => "muss größer als %s sein",
'max' => "muss kleiner als %s sein", 'max' => "muss kleiner als %s sein",
'listContains' => "enthält einen ungültigen Wert",
'in' => "enthält einen ungültigen Wert", 'in' => "enthält einen ungültigen Wert",
'notIn' => "enthält einen ungültigen Wert", 'notIn' => "enthält einen ungültigen Wert",
'ip' => "enthält keine gültige IP-Addresse", 'ip' => "enthält keine gültige IP-Addresse",

View File

@ -10,6 +10,7 @@ return array(
'length' => "πρέπει να είναι μεγαλύτερο από %d", 'length' => "πρέπει να είναι μεγαλύτερο από %d",
'min' => "πρέπει να είναι τουλάχιστον %s", 'min' => "πρέπει να είναι τουλάχιστον %s",
'max' => "δεν πρέπει να είναι περισσότερο από %s", 'max' => "δεν πρέπει να είναι περισσότερο από %s",
'listContains' => "περιέχει μη έγκυρη τιμή",
'in' => "περιέχει μη έγκυρη τιμή", 'in' => "περιέχει μη έγκυρη τιμή",
'notIn' => "περιέχει μη έγκυρη τιμή", 'notIn' => "περιέχει μη έγκυρη τιμή",
'ip' => "δεν είναι έγκυρη διεύθυνση IP", 'ip' => "δεν είναι έγκυρη διεύθυνση IP",

View File

@ -10,6 +10,7 @@ return array(
'length' => "must be %d characters long", 'length' => "must be %d characters long",
'min' => "must be at least %s", 'min' => "must be at least %s",
'max' => "must be no more than %s", 'max' => "must be no more than %s",
'listContains' => "contains invalid value",
'in' => "contains invalid value", 'in' => "contains invalid value",
'notIn' => "contains invalid value", 'notIn' => "contains invalid value",
'ip' => "is not a valid IP address", 'ip' => "is not a valid IP address",

View File

@ -10,6 +10,7 @@ return array(
'length' => "on lyhyempi kuin %d", 'length' => "on lyhyempi kuin %d",
'min' => "ei ole vähintään %s", 'min' => "ei ole vähintään %s",
'max' => "ei ole enintään %s", 'max' => "ei ole enintään %s",
'listContains' => "sisältää virheellisen arvon",
'in' => "sisältää virheellisen arvon", 'in' => "sisältää virheellisen arvon",
'notIn' => "sisältää virheellisen arvon", 'notIn' => "sisältää virheellisen arvon",
'ip' => "ei ole oikeanmuotoinen IP-osoite", 'ip' => "ei ole oikeanmuotoinen IP-osoite",

View File

@ -10,6 +10,7 @@ return array(
'length' => "doit être plus long que %d", 'length' => "doit être plus long que %d",
'min' => "doit être plus grand que %s", 'min' => "doit être plus grand que %s",
'max' => "doit être plus petit que %s", 'max' => "doit être plus petit que %s",
'listContains' => "contient une valeur non valide",
'in' => "contient une valeur non valide", 'in' => "contient une valeur non valide",
'notIn' => "contient une valeur non valide", 'notIn' => "contient une valeur non valide",
'ip' => "n'est pas une adresse IP valide", 'ip' => "n'est pas une adresse IP valide",

View File

@ -10,6 +10,7 @@ return array(
'length' => "harus lebih panjang dari %d", 'length' => "harus lebih panjang dari %d",
'min' => "harus lebih besar dari %s", 'min' => "harus lebih besar dari %s",
'max' => "harus kurang dari %s", 'max' => "harus kurang dari %s",
'listContains' => "berisi nilai/value yang tidak valid",
'in' => "berisi nilai/value yang tidak valid", 'in' => "berisi nilai/value yang tidak valid",
'notIn' => "berisi nilai/value yang tidak valid", 'notIn' => "berisi nilai/value yang tidak valid",
'ip' => "format alamat IP tidak benar", 'ip' => "format alamat IP tidak benar",

View File

@ -10,6 +10,7 @@ return array(
'length' => "deve avere una lunghezza di %d", 'length' => "deve avere una lunghezza di %d",
'min' => "deve essere superiore a %s", 'min' => "deve essere superiore a %s",
'max' => "deve essere inferiore a %s", 'max' => "deve essere inferiore a %s",
'listContains' => "contiene un valore non valido",
'in' => "contiene un valore non valido", 'in' => "contiene un valore non valido",
'notIn' => "contiene un valore non valido", 'notIn' => "contiene un valore non valido",
'ip' => "non è un indirizzo IP valido", 'ip' => "non è un indirizzo IP valido",

View File

@ -10,6 +10,7 @@ return array(
'length' => "は%d文字で入力してください", 'length' => "は%d文字で入力してください",
'min' => "には%sより大きな値を入力してください", 'min' => "には%sより大きな値を入力してください",
'max' => "には%sより小さな値を入力してください", 'max' => "には%sより小さな値を入力してください",
'listContains' => "には選択できない値が含まれています",
'in' => "には選択できない値が含まれています", 'in' => "には選択できない値が含まれています",
'notIn' => "には選択できない値が含まれています", 'notIn' => "には選択できない値が含まれています",
'ip' => "はIPアドレスの書式として正しくありません", 'ip' => "はIPアドレスの書式として正しくありません",

View File

@ -10,6 +10,7 @@ return array(
'length' => "의 길이는 %d 이어야 합니다.", 'length' => "의 길이는 %d 이어야 합니다.",
'min' => "은(는) %s 이상이어야 합니다.", 'min' => "은(는) %s 이상이어야 합니다.",
'max' => "은(는) %s 이하여야 합니다.", 'max' => "은(는) %s 이하여야 합니다.",
'listContains' => "은(는) 올바르지 않은 값을 포함하고 있습니다.",
'in' => "은(는) 올바르지 않은 값을 포함하고 있습니다.", 'in' => "은(는) 올바르지 않은 값을 포함하고 있습니다.",
'notIn' => "은(는) 올바르지 않은 값을 포함하고 있습니다.", 'notIn' => "은(는) 올바르지 않은 값을 포함하고 있습니다.",
'ip' => "은(는) 올바르지 않은 IP입니다.", 'ip' => "은(는) 올바르지 않은 IP입니다.",

View File

@ -9,6 +9,7 @@ return array(
'length' => "turi būti %d ženklų ilgio", 'length' => "turi būti %d ženklų ilgio",
'min' => "turi būti bent %s", 'min' => "turi būti bent %s",
'max' => "turi būti ne daugiau kaip %s", 'max' => "turi būti ne daugiau kaip %s",
'listContains' => "turi neteisingą vertę",
'in' => "turi neteisingą vertę", 'in' => "turi neteisingą vertę",
'notIn' => "turi neteisingą vertę", 'notIn' => "turi neteisingą vertę",
'ip' => "nėra teisingas IP adresas", 'ip' => "nėra teisingas IP adresas",

View File

@ -10,6 +10,7 @@ return array(
'length' => "nedrīkst būt garāks par %d simboliem", 'length' => "nedrīkst būt garāks par %d simboliem",
'min' => "jābūt garākam par %s simboliem", 'min' => "jābūt garākam par %s simboliem",
'max' => "jābūt īsākam par %s simboliem", 'max' => "jābūt īsākam par %s simboliem",
'listContains' => "lauks satur nederīgu vērtību",
'in' => "lauks satur nederīgu vērtību", 'in' => "lauks satur nederīgu vērtību",
'notIn' => "lauks satur nederīgu vērtību", 'notIn' => "lauks satur nederīgu vērtību",
'ip' => " lauks nav derīga IP adrese", 'ip' => " lauks nav derīga IP adrese",

View File

@ -10,6 +10,7 @@ return array(
'length' => "må være %d tegn langt", 'length' => "må være %d tegn langt",
'min' => "må være minst %s", 'min' => "må være minst %s",
'max' => "må ikke være mer enn %s", 'max' => "må ikke være mer enn %s",
'listContains' => "inneholder ugyldig verdi",
'in' => "inneholder ugyldig verdi", 'in' => "inneholder ugyldig verdi",
'notIn' => "inneholder ugyldig verdi", 'notIn' => "inneholder ugyldig verdi",
'ip' => "er ikke en gyldig IP adresse", 'ip' => "er ikke en gyldig IP adresse",

View File

@ -10,6 +10,7 @@ return array(
'length' => "moet minstens %d karakters lang zijn", 'length' => "moet minstens %d karakters lang zijn",
'min' => "moet minstens %s zijn", 'min' => "moet minstens %s zijn",
'max' => "mag niet meer zijn dan %s", 'max' => "mag niet meer zijn dan %s",
'listContains' => "bevat een ongeldige waarde",
'in' => "bevat een ongeldige waarde", 'in' => "bevat een ongeldige waarde",
'notIn' => "bevat een ongeldige waarde", 'notIn' => "bevat een ongeldige waarde",
'ip' => "is geen geldig IP-adres", 'ip' => "is geen geldig IP-adres",

View File

@ -10,6 +10,7 @@ return array(
'length' => "må være %d tegn", 'length' => "må være %d tegn",
'min' => "må være minst %s", 'min' => "må være minst %s",
'max' => "må ikke være mer enn %s", 'max' => "må ikke være mer enn %s",
'listContains' => "inneholder ugyldig verdi",
'in' => "inneholder ugyldig verdi", 'in' => "inneholder ugyldig verdi",
'notIn' => "inneholder ugyldig verdi", 'notIn' => "inneholder ugyldig verdi",
'ip' => "er ikkje ein gyldig IP Adresse", 'ip' => "er ikkje ein gyldig IP Adresse",

View File

@ -10,6 +10,7 @@ return array(
'length' => "musi być dłuższe niż %d", 'length' => "musi być dłuższe niż %d",
'min' => "musi być przynajmniej %s", 'min' => "musi być przynajmniej %s",
'max' => "nie może być większe niż %s", 'max' => "nie może być większe niż %s",
'listContains' => "zawiera nieprawidłową wartość",
'in' => "zawiera nieprawidłową wartość", 'in' => "zawiera nieprawidłową wartość",
'notIn' => "zawiera nieprawidłową wartość", 'notIn' => "zawiera nieprawidłową wartość",
'ip' => "nie jest prawidłowym adresem IP", 'ip' => "nie jest prawidłowym adresem IP",

View File

@ -10,6 +10,7 @@ return array(
'length' => "trebuie sa fie mai lung decat %d", 'length' => "trebuie sa fie mai lung decat %d",
'min' => "trebuie sa fie cel putin %s", 'min' => "trebuie sa fie cel putin %s",
'max' => "nu trebuie sa fie mai mult de %s", 'max' => "nu trebuie sa fie mai mult de %s",
'listContains' => "contine caractere invalide",
'in' => "contine caractere invalide", 'in' => "contine caractere invalide",
'notIn' => "contine o valoare invalida", 'notIn' => "contine o valoare invalida",
'ip' => "nu este o adresa IP valida", 'ip' => "nu este o adresa IP valida",

View File

@ -10,6 +10,7 @@ return array(
'length' => "должно быть длиннее, чем %d", 'length' => "должно быть длиннее, чем %d",
'min' => "должно быть не менее, чем %s", 'min' => "должно быть не менее, чем %s",
'max' => "должно быть не более, чем %s", 'max' => "должно быть не более, чем %s",
'listContains' => "содержит неверное значение",
'in' => "содержит неверное значение", 'in' => "содержит неверное значение",
'notIn' => "содержит неверное значение", 'notIn' => "содержит неверное значение",
'ip' => "не является валидным IP адресом", 'ip' => "не является валидным IP адресом",

View File

@ -10,6 +10,7 @@ return array(
'length' => "musí byť dlhý aspoň %d", 'length' => "musí byť dlhý aspoň %d",
'min' => "musí byť dlhý minimálne %s", 'min' => "musí byť dlhý minimálne %s",
'max' => "musí byť maximálne %s", 'max' => "musí byť maximálne %s",
'listContains' => "obsahuje nepovolenú hodnotu",
'in' => "obsahuje nepovolenú hodnotu", 'in' => "obsahuje nepovolenú hodnotu",
'notIn' => "obsahuje nepovolenú hodnotu", 'notIn' => "obsahuje nepovolenú hodnotu",
'ip' => "nie je korektná IP adresa", 'ip' => "nie je korektná IP adresa",

View File

@ -10,6 +10,7 @@ return array(
'length' => "måste vara %d tecken långt", 'length' => "måste vara %d tecken långt",
'min' => "måste vara minst %s", 'min' => "måste vara minst %s",
'max' => "får inte vara mer än %s", 'max' => "får inte vara mer än %s",
'listContains' => "innehåller ogiltigt värde",
'in' => "innehåller ogiltigt värde", 'in' => "innehåller ogiltigt värde",
'notIn' => "innehåller ogiltigt värde", 'notIn' => "innehåller ogiltigt värde",
'ip' => "är inte en giltlig IP-adress", 'ip' => "är inte en giltlig IP-adress",

View File

@ -10,6 +10,7 @@ return array(
'length' => "ต้องมีความยาวมากกว่า %d", 'length' => "ต้องมีความยาวมากกว่า %d",
'min' => "ต้องมีอย่างน้อย %s", 'min' => "ต้องมีอย่างน้อย %s",
'max' => "ต้องไม่มากเกิน %s", 'max' => "ต้องไม่มากเกิน %s",
'listContains' => "ประกอบด้วยค่าที่ไม่ถูกต้อง",
'in' => "ประกอบด้วยค่าที่ไม่ถูกต้อง", 'in' => "ประกอบด้วยค่าที่ไม่ถูกต้อง",
'notIn' => "ประกอบด้วยค่าที่ไม่ถูกต้อง", 'notIn' => "ประกอบด้วยค่าที่ไม่ถูกต้อง",
'ip' => "ไม่ใช่ IP ที่ถูกต้อง", 'ip' => "ไม่ใช่ IP ที่ถูกต้อง",

View File

@ -10,6 +10,7 @@ return array(
'length' => "en az %d adet uzunluğunda olmalı", 'length' => "en az %d adet uzunluğunda olmalı",
'min' => "en az böyle olmalı %s", 'min' => "en az böyle olmalı %s",
'max' => "bundan daha fazla olmalı %s", 'max' => "bundan daha fazla olmalı %s",
'listContains' => "geçersiz değer içeriyor",
'in' => "geçersiz değer içeriyor", 'in' => "geçersiz değer içeriyor",
'notIn' => "geçersiz değer içeriyor", 'notIn' => "geçersiz değer içeriyor",
'ip' => "geçerli bir IP adresi değil", 'ip' => "geçerli bir IP adresi değil",

View File

@ -10,6 +10,7 @@ return array(
'length' => "має бути довшим, ніж %d", 'length' => "має бути довшим, ніж %d",
'min' => "має бути більше, ніж %s", 'min' => "має бути більше, ніж %s",
'max' => "повинно бути менше, ніж %s", 'max' => "повинно бути менше, ніж %s",
'listContains' => "містить невірне значення",
'in' => "містить невірне значення", 'in' => "містить невірне значення",
'notIn' => "містить невірне значення", 'notIn' => "містить невірне значення",
'ip' => "не є валідною IP адресою", 'ip' => "не є валідною IP адресою",

View File

@ -10,6 +10,7 @@ return array(
'length' => "phải dài hơn %d", 'length' => "phải dài hơn %d",
'min' => "ít nhất %s", 'min' => "ít nhất %s",
'max' => "tối đa %s", 'max' => "tối đa %s",
'listContains' => "chứa giá trị không hợp lệ",
'in' => "chứa giá trị không hợp lệ", 'in' => "chứa giá trị không hợp lệ",
'notIn' => "chứa giá trị không hợp lệ", 'notIn' => "chứa giá trị không hợp lệ",
'ip' => "địa chỉ IP không hợp lệ", 'ip' => "địa chỉ IP không hợp lệ",

View File

@ -10,6 +10,7 @@ return array(
'length' => "长度必须大于 %d", 'length' => "长度必须大于 %d",
'min' => "必须大于 %s", 'min' => "必须大于 %s",
'max' => "必须小于 %s", 'max' => "必须小于 %s",
'listContains' => "无效的值",
'in' => "无效的值", 'in' => "无效的值",
'notIn' => "无效的值", 'notIn' => "无效的值",
'ip' => "无效IP地址", 'ip' => "无效IP地址",

View File

@ -10,6 +10,7 @@ return array(
'length' => "長度必須大於 %d", 'length' => "長度必須大於 %d",
'min' => "必須大於 %s", 'min' => "必須大於 %s",
'max' => "必須小於 %s", 'max' => "必須小於 %s",
'listContains' => "無效的值",
'in' => "無效的值", 'in' => "無效的值",
'notIn' => "無效的值", 'notIn' => "無效的值",
'ip' => "無效IP地址", 'ip' => "無效IP地址",

View File

@ -422,6 +422,29 @@ class Validator
return in_array($value, $params[0], $strict); return in_array($value, $params[0], $strict);
} }
/**
* Validate a field is contained within a list of values
*
* @param string $field
* @param mixed $value
* @param array $params
* @return bool
*/
protected function validateListContains($field, $value, $params)
{
$isAssoc = array_values($value) !== $value;
if ($isAssoc) {
$value = array_keys($value);
}
$strict = false;
if (isset($params[1])) {
$strict = $params[1];
}
return in_array($params[0], $value, $strict);
}
/** /**
* Validate a field is not contained within a list of values * Validate a field is not contained within a list of values
* *

View File

@ -726,6 +726,35 @@ class ValidateTest extends BaseTestCase
$this->assertFalse($v->validate()); $this->assertFalse($v->validate());
} }
public function testListContainsValid()
{
$v = new Validator(array('color' => array('blue', 'green', 'red', 'yellow')));
$v->rule('listContains', 'color', 'red');
$this->assertTrue($v->validate());
}
public function testListContainsValidAltSyntax()
{
$v = new Validator(array('color' => array('blue', 'green', 'red')));
$v->rules(array(
'listContains' => array(
array('color', 'red')
)
));
$this->assertTrue($v->validate());
}
public function testListContainsInvalidAltSyntax()
{
$v = new Validator(array('color' => array('blue', 'green', 'red')));
$v->rules(array(
'listContains' => array(
array('color', 'yellow')
)
));
$this->assertFalse($v->validate());
}
public function testInValid() public function testInValid()
{ {
$v = new Validator(array('color' => 'green')); $v = new Validator(array('color' => 'green'));