From 0976fa3a7913262d02b97dd2662319eaf395375f Mon Sep 17 00:00:00 2001 From: Tobias Hinz Date: Thu, 9 May 2019 16:34:50 +0200 Subject: [PATCH 1/2] Added listContains --- README.md | 18 ++++++++++++++++++ lang/ar.php | 1 + lang/az.php | 1 + lang/bg.php | 1 + lang/de.php | 1 + lang/el.php | 1 + lang/en.php | 1 + lang/es.php | 1 + lang/fi.php | 1 + lang/fr.php | 1 + lang/id.php | 1 + lang/it.php | 1 + lang/ja.php | 1 + lang/ko.php | 1 + lang/lt.php | 1 + lang/lv.php | 1 + lang/nb.php | 1 + lang/nl.php | 1 + lang/nn.php | 1 + lang/pl.php | 1 + lang/pt-br.php | 1 + lang/ro.php | 1 + lang/ru.php | 1 + lang/sk.php | 1 + lang/sv.php | 1 + lang/th.php | 1 + lang/tr.php | 1 + lang/uk.php | 1 + lang/vi.php | 1 + lang/zh-cn.php | 1 + lang/zh-tw.php | 1 + src/Valitron/Validator.php | 23 +++++++++++++++++++++++ tests/Valitron/ValidateTest.php | 29 +++++++++++++++++++++++++++++ 33 files changed, 100 insertions(+) diff --git a/README.md b/README.md index 65c247d..ba363d6 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,7 @@ V::lang('ar'); * `lengthMax` - String must be less than given length * `min` - Minimum * `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 * `notIn` - Negation of `in` rule (not in array of values) * `ip` - Valid IP address @@ -443,6 +444,23 @@ $v->rules([ $v->validate(); ``` +## listContains fields usage +The `listContains` rule checks that the field is present in a given array of values. +```php +$v->rule('in', 'color', 'yellow'); +``` + +Alternate syntax. +```php +$v = new Valitron\Validator(['color' => ['blue', 'green', 'red', 'yellow']]); +$v->rules([ + 'listContains' => [ + ['color', 'yellow'] + ] +]); +$v->validate(); +``` + ## in fields usage The `in` rule checks that the field is present in a given array of values. ```php diff --git a/lang/ar.php b/lang/ar.php index 0c03547..533ccab 100644 --- a/lang/ar.php +++ b/lang/ar.php @@ -11,6 +11,7 @@ return array( 'min' => "يجب ان يكون اعلي من %s", 'max' => "يجب ان يكون اقل من %s", 'in' => "الُمدخل يغير صحيح", + 'listContains' => "الُمدخل يغير صحيح", 'notIn' => "الُمدخل يغير صحيح", 'ip' => "رقم الإتصال غير صحيح", 'email' => "البريد الألكتروني غير صحيح", diff --git a/lang/az.php b/lang/az.php index 4f8405b..0cb3c03 100644 --- a/lang/az.php +++ b/lang/az.php @@ -10,6 +10,7 @@ return array( 'length' => "%d qədər uzunluğu olmalıdır", 'min' => "minimum %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", 'notIn' => "yalnış dəyər ehtiva edir", 'ip' => "düzgün IP ünvanı deyil", diff --git a/lang/bg.php b/lang/bg.php index 53b71d8..2166b11 100644 --- a/lang/bg.php +++ b/lang/bg.php @@ -10,6 +10,7 @@ return array( 'length' => "трябва да бъде %d символа дълго", 'min' => "трябвя да бъде поне %s", 'max' => "трябва да бъде не повече от %s", + 'listContains' => "съдържа невалидна стойност", 'in' => "съдържа невалидна стойност", 'notIn' => "съдържа невалидна стойност", 'ip' => "е невалиден IP адрес", diff --git a/lang/de.php b/lang/de.php index 4847bd0..4e7ae07 100644 --- a/lang/de.php +++ b/lang/de.php @@ -10,6 +10,7 @@ return array( 'length' => "kann nicht länger als %d sein", 'min' => "muss größer als %s sein", 'max' => "muss kleiner als %s sein", + 'listContains' => "enthält einen ungültigen Wert", 'in' => "enthält einen ungültigen Wert", 'notIn' => "enthält einen ungültigen Wert", 'ip' => "enthält keine gültige IP-Addresse", diff --git a/lang/el.php b/lang/el.php index 622d8d0..ae35aaf 100644 --- a/lang/el.php +++ b/lang/el.php @@ -10,6 +10,7 @@ return array( 'length' => "πρέπει να είναι μεγαλύτερο από %d", 'min' => "πρέπει να είναι τουλάχιστον %s", 'max' => "δεν πρέπει να είναι περισσότερο από %s", + 'listContains' => "περιέχει μη έγκυρη τιμή", 'in' => "περιέχει μη έγκυρη τιμή", 'notIn' => "περιέχει μη έγκυρη τιμή", 'ip' => "δεν είναι έγκυρη διεύθυνση IP", diff --git a/lang/en.php b/lang/en.php index 564238a..43bc6b7 100644 --- a/lang/en.php +++ b/lang/en.php @@ -10,6 +10,7 @@ return array( 'length' => "must be %d characters long", 'min' => "must be at least %s", 'max' => "must be no more than %s", + 'listContains' => "contains invalid value", 'in' => "contains invalid value", 'notIn' => "contains invalid value", 'ip' => "is not a valid IP address", diff --git a/lang/es.php b/lang/es.php index 3f1d932..7cbe4da 100644 --- a/lang/es.php +++ b/lang/es.php @@ -10,6 +10,7 @@ return array( 'length' => "debe ser mas largo de %d", 'min' => "debe ser mayor de %s", 'max' => "debe ser menor de %s", + 'listContains' => "contiene un valor inválido", 'in' => "contiene un valor inválido", 'notIn' => "contiene un valor inválido", 'ip' => "no es una dirección IP", diff --git a/lang/fi.php b/lang/fi.php index f20c8f2..ea2d25b 100644 --- a/lang/fi.php +++ b/lang/fi.php @@ -10,6 +10,7 @@ return array( 'length' => "on lyhyempi kuin %d", 'min' => "ei ole vähintään %s", 'max' => "ei ole enintään %s", + 'listContains' => "sisältää virheellisen arvon", 'in' => "sisältää virheellisen arvon", 'notIn' => "sisältää virheellisen arvon", 'ip' => "ei ole oikeanmuotoinen IP-osoite", diff --git a/lang/fr.php b/lang/fr.php index 82b746b..eabf30a 100644 --- a/lang/fr.php +++ b/lang/fr.php @@ -10,6 +10,7 @@ return array( 'length' => "doit être plus long que %d", 'min' => "doit être plus grand que %s", 'max' => "doit être plus petit que %s", + 'listContains' => "contient une valeur non valide", 'in' => "contient une valeur non valide", 'notIn' => "contient une valeur non valide", 'ip' => "n'est pas une adresse IP valide", diff --git a/lang/id.php b/lang/id.php index 3ba2711..2df9a61 100644 --- a/lang/id.php +++ b/lang/id.php @@ -10,6 +10,7 @@ return array( 'length' => "harus lebih panjang dari %d", 'min' => "harus lebih besar dari %s", 'max' => "harus kurang dari %s", + 'listContains' => "berisi nilai/value yang tidak valid", 'in' => "berisi nilai/value yang tidak valid", 'notIn' => "berisi nilai/value yang tidak valid", 'ip' => "format alamat IP tidak benar", diff --git a/lang/it.php b/lang/it.php index d5e678d..467746b 100644 --- a/lang/it.php +++ b/lang/it.php @@ -10,6 +10,7 @@ return array( 'length' => "deve avere una lunghezza di %d", 'min' => "deve essere superiore a %s", 'max' => "deve essere inferiore a %s", + 'listContains' => "contiene un valore non valido", 'in' => "contiene un valore non valido", 'notIn' => "contiene un valore non valido", 'ip' => "non è un indirizzo IP valido", diff --git a/lang/ja.php b/lang/ja.php index 0049331..3eaf6d1 100644 --- a/lang/ja.php +++ b/lang/ja.php @@ -10,6 +10,7 @@ return array( 'length' => "は%d文字で入力してください", 'min' => "には%sより大きな値を入力してください", 'max' => "には%sより小さな値を入力してください", + 'listContains' => "には選択できない値が含まれています", 'in' => "には選択できない値が含まれています", 'notIn' => "には選択できない値が含まれています", 'ip' => "はIPアドレスの書式として正しくありません", diff --git a/lang/ko.php b/lang/ko.php index 6b9ce78..c4d42bf 100644 --- a/lang/ko.php +++ b/lang/ko.php @@ -10,6 +10,7 @@ return array( 'length' => "의 길이는 %d 이어야 합니다.", 'min' => "은(는) %s 이상이어야 합니다.", 'max' => "은(는) %s 이하여야 합니다.", + 'listContains' => "은(는) 올바르지 않은 값을 포함하고 있습니다.", 'in' => "은(는) 올바르지 않은 값을 포함하고 있습니다.", 'notIn' => "은(는) 올바르지 않은 값을 포함하고 있습니다.", 'ip' => "은(는) 올바르지 않은 IP입니다.", diff --git a/lang/lt.php b/lang/lt.php index 3274ad0..4404311 100644 --- a/lang/lt.php +++ b/lang/lt.php @@ -9,6 +9,7 @@ return array( 'length' => "turi būti %d ženklų ilgio", 'min' => "turi būti bent %s", 'max' => "turi būti ne daugiau kaip %s", + 'listContains' => "turi neteisingą vertę", 'in' => "turi neteisingą vertę", 'notIn' => "turi neteisingą vertę", 'ip' => "nėra teisingas IP adresas", diff --git a/lang/lv.php b/lang/lv.php index 9b5e54d..fef222a 100644 --- a/lang/lv.php +++ b/lang/lv.php @@ -10,6 +10,7 @@ return array( 'length' => "nedrīkst būt garāks par %d simboliem", 'min' => "jābūt garā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", 'notIn' => "lauks satur nederīgu vērtību", 'ip' => " lauks nav derīga IP adrese", diff --git a/lang/nb.php b/lang/nb.php index 42de2b0..d5d2d5e 100644 --- a/lang/nb.php +++ b/lang/nb.php @@ -10,6 +10,7 @@ return array( 'length' => "må være %d tegn langt", 'min' => "må være minst %s", 'max' => "må ikke være mer enn %s", + 'listContains' => "inneholder ugyldig verdi", 'in' => "inneholder ugyldig verdi", 'notIn' => "inneholder ugyldig verdi", 'ip' => "er ikke en gyldig IP adresse", diff --git a/lang/nl.php b/lang/nl.php index fbbc0c4..7d7fa8f 100644 --- a/lang/nl.php +++ b/lang/nl.php @@ -10,6 +10,7 @@ return array( 'length' => "moet minstens %d karakters lang zijn", 'min' => "moet minstens %s zijn", 'max' => "mag niet meer zijn dan %s", + 'listContains' => "bevat een ongeldige waarde", 'in' => "bevat een ongeldige waarde", 'notIn' => "bevat een ongeldige waarde", 'ip' => "is geen geldig IP-adres", diff --git a/lang/nn.php b/lang/nn.php index 3cddb41..1fa3b6b 100644 --- a/lang/nn.php +++ b/lang/nn.php @@ -10,6 +10,7 @@ return array( 'length' => "må være %d tegn", 'min' => "må være minst %s", 'max' => "må ikke være mer enn %s", + 'listContains' => "inneholder ugyldig verdi", 'in' => "inneholder ugyldig verdi", 'notIn' => "inneholder ugyldig verdi", 'ip' => "er ikkje ein gyldig IP Adresse", diff --git a/lang/pl.php b/lang/pl.php index f3f719f..0f8f2e0 100644 --- a/lang/pl.php +++ b/lang/pl.php @@ -10,6 +10,7 @@ return array( 'length' => "musi być dłuższe niż %d", 'min' => "musi być przynajmniej %s", 'max' => "nie może być większe niż %s", + 'listContains' => "zawiera nieprawidłową wartość", 'in' => "zawiera nieprawidłową wartość", 'notIn' => "zawiera nieprawidłową wartość", 'ip' => "nie jest prawidłowym adresem IP", diff --git a/lang/pt-br.php b/lang/pt-br.php index d9ae458..2fa1fca 100644 --- a/lang/pt-br.php +++ b/lang/pt-br.php @@ -10,6 +10,7 @@ return array( 'length' => "deve ter %d caracteres", 'min' => "deve ser maior que %s", 'max' => "deve ser menor que %s", + 'listContains' => "contém um valor inválido", 'in' => "contém um valor inválido", 'notIn' => "contém um valor inválido", 'ip' => "não é um IP válido", diff --git a/lang/ro.php b/lang/ro.php index d03c855..5efa2fa 100644 --- a/lang/ro.php +++ b/lang/ro.php @@ -10,6 +10,7 @@ return array( 'length' => "trebuie sa fie mai lung decat %d", 'min' => "trebuie sa fie cel putin %s", 'max' => "nu trebuie sa fie mai mult de %s", + 'listContains' => "contine caractere invalide", 'in' => "contine caractere invalide", 'notIn' => "contine o valoare invalida", 'ip' => "nu este o adresa IP valida", diff --git a/lang/ru.php b/lang/ru.php index 44957b2..b934046 100644 --- a/lang/ru.php +++ b/lang/ru.php @@ -10,6 +10,7 @@ return array( 'length' => "должно быть длиннее, чем %d", 'min' => "должно быть не менее, чем %s", 'max' => "должно быть не более, чем %s", + 'listContains' => "содержит неверное значение", 'in' => "содержит неверное значение", 'notIn' => "содержит неверное значение", 'ip' => "не является валидным IP адресом", diff --git a/lang/sk.php b/lang/sk.php index 2f946b4..859e53e 100644 --- a/lang/sk.php +++ b/lang/sk.php @@ -10,6 +10,7 @@ return array( 'length' => "musí byť dlhý aspoň %d", 'min' => "musí byť dlhý minimálne %s", 'max' => "musí byť maximálne %s", + 'listContains' => "obsahuje nepovolenú hodnotu", 'in' => "obsahuje nepovolenú hodnotu", 'notIn' => "obsahuje nepovolenú hodnotu", 'ip' => "nie je korektná IP adresa", diff --git a/lang/sv.php b/lang/sv.php index 94884cf..5e29669 100644 --- a/lang/sv.php +++ b/lang/sv.php @@ -10,6 +10,7 @@ return array( 'length' => "måste vara %d tecken långt", 'min' => "måste vara minst %s", 'max' => "får inte vara mer än %s", + 'listContains' => "innehåller ogiltigt värde", 'in' => "innehåller ogiltigt värde", 'notIn' => "innehåller ogiltigt värde", 'ip' => "är inte en giltlig IP-adress", diff --git a/lang/th.php b/lang/th.php index 516b2ea..6f4af40 100644 --- a/lang/th.php +++ b/lang/th.php @@ -10,6 +10,7 @@ return array( 'length' => "ต้องมีความยาวมากกว่า %d", 'min' => "ต้องมีอย่างน้อย %s", 'max' => "ต้องไม่มากเกิน %s", + 'listContains' => "ประกอบด้วยค่าที่ไม่ถูกต้อง", 'in' => "ประกอบด้วยค่าที่ไม่ถูกต้อง", 'notIn' => "ประกอบด้วยค่าที่ไม่ถูกต้อง", 'ip' => "ไม่ใช่ IP ที่ถูกต้อง", diff --git a/lang/tr.php b/lang/tr.php index acaaa8d..11fa708 100644 --- a/lang/tr.php +++ b/lang/tr.php @@ -10,6 +10,7 @@ return array( 'length' => "en az %d adet uzunluğunda olmalı", 'min' => "en az böyle olmalı %s", 'max' => "bundan daha fazla olmalı %s", + 'listContains' => "geçersiz değer içeriyor", 'in' => "geçersiz değer içeriyor", 'notIn' => "geçersiz değer içeriyor", 'ip' => "geçerli bir IP adresi değil", diff --git a/lang/uk.php b/lang/uk.php index a08153e..65df219 100644 --- a/lang/uk.php +++ b/lang/uk.php @@ -10,6 +10,7 @@ return array( 'length' => "має бути довшим, ніж %d", 'min' => "має бути більше, ніж %s", 'max' => "повинно бути менше, ніж %s", + 'listContains' => "містить невірне значення", 'in' => "містить невірне значення", 'notIn' => "містить невірне значення", 'ip' => "не є валідною IP адресою", diff --git a/lang/vi.php b/lang/vi.php index a47270e..de7d91d 100644 --- a/lang/vi.php +++ b/lang/vi.php @@ -10,6 +10,7 @@ return array( 'length' => "phải dài hơn %d", 'min' => "ít nhất %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ệ", 'notIn' => "chứa giá trị không hợp lệ", 'ip' => "địa chỉ IP không hợp lệ", diff --git a/lang/zh-cn.php b/lang/zh-cn.php index 97835b4..d05525c 100644 --- a/lang/zh-cn.php +++ b/lang/zh-cn.php @@ -10,6 +10,7 @@ return array( 'length' => "长度必须大于 %d", 'min' => "必须大于 %s", 'max' => "必须小于 %s", + 'listContains' => "无效的值", 'in' => "无效的值", 'notIn' => "无效的值", 'ip' => "无效IP地址", diff --git a/lang/zh-tw.php b/lang/zh-tw.php index 59d506c..70fb664 100644 --- a/lang/zh-tw.php +++ b/lang/zh-tw.php @@ -10,6 +10,7 @@ return array( 'length' => "長度必須大於 %d", 'min' => "必須大於 %s", 'max' => "必須小於 %s", + 'listContains' => "無效的值", 'in' => "無效的值", 'notIn' => "無效的值", 'ip' => "無效IP地址", diff --git a/src/Valitron/Validator.php b/src/Valitron/Validator.php index b92def2..3fd3b4f 100644 --- a/src/Valitron/Validator.php +++ b/src/Valitron/Validator.php @@ -422,6 +422,29 @@ class Validator 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 * diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index fc9f229..dce43bb 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -726,6 +726,35 @@ class ValidateTest extends BaseTestCase $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() { $v = new Validator(array('color' => 'green')); From c4ea1db37189be29b9866c3f605fb7b431f5ee7c Mon Sep 17 00:00:00 2001 From: Tobias Hinz Date: Thu, 9 May 2019 16:38:39 +0200 Subject: [PATCH 2/2] Usage documentation adjusted --- README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ba363d6..81329da 100644 --- a/README.md +++ b/README.md @@ -447,7 +447,7 @@ $v->validate(); ## listContains fields usage The `listContains` rule checks that the field is present in a given array of values. ```php -$v->rule('in', 'color', 'yellow'); +$v->rule('listContains', 'color', 'yellow'); ``` Alternate syntax. @@ -988,7 +988,7 @@ Valitron\Validator::addRule('alwaysFail', function($field, $value, array $params ``` You can also use one-off rules that are only valid for the specified -fields. +fields. ```php $v = new Valitron\Validator(array("foo" => "bar")); @@ -1000,12 +1000,12 @@ $v->rule(function($field, $value, $params, $fields) { This is useful because such rules can have access to variables defined in the scope where the `Validator` lives. The Closure's signature is identical to `Validator::addRule` callback's -signature. +signature. If you wish to add your own rules that are not static (i.e., -your rule is not static and available to call `Validator` -instances), you need to use `Validator::addInstanceRule`. -This rule will take the same parameters as +your rule is not static and available to call `Validator` +instances), you need to use `Validator::addInstanceRule`. +This rule will take the same parameters as `Validator::addRule` but it has to be called on a `Validator` instance. @@ -1085,7 +1085,7 @@ You can also add rules on a per-field basis: $rules = [ 'required', ['lengthMin', 4] -]; +]; $v = new Valitron\Validator(array('foo' => 'bar')); $v->mapFieldRules('foo', $rules); @@ -1173,4 +1173,3 @@ before running the tests: 6. Push to the branch (`git push origin my-new-feature`) 7. Create new Pull Request 8. Pat yourself on the back for being so awesome -