From 1544f6fc902c74cb55ab3afe37921449746cd38b Mon Sep 17 00:00:00 2001 From: Hafez Divandari Date: Sat, 10 Dec 2022 00:05:18 +0330 Subject: [PATCH] [9.x] Add `ascii` and `ulid` validation rules (#45218) * add `ulid` validation rule * add `ascii` validation rule * formatting Co-authored-by: Taylor Otwell --- .../Concerns/ValidatesAttributes.php | 24 ++++++++++++++++ tests/Validation/ValidationValidatorTest.php | 28 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index cc9985e631c6..a8f3b11a1126 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -142,6 +142,18 @@ protected function getDnsRecords($hostname, $type) return dns_get_record($hostname, $type); } + /** + * Validate that an attribute is 7 bit ASCII. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function validateAscii($attribute, $value) + { + return Str::isAscii($value); + } + /** * "Break" on first validation fail. * @@ -2139,6 +2151,18 @@ public function validateUrl($attribute, $value) return preg_match($pattern, $value) > 0; } + /** + * Validate that an attribute is a valid ULID. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function validateUlid($attribute, $value) + { + return Str::isUlid($value); + } + /** * Validate that an attribute is a valid UUID. * diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index d1b82afe7e17..f73b8865ab0b 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -6726,6 +6726,34 @@ public static function invalidUuidList() ]; } + public function testValidateWithValidAscii() + { + $trans = $this->getIlluminateArrayTranslator(); + $v = new Validator($trans, ['foo' => 'Dusseldorf'], ['foo' => 'ascii']); + $this->assertTrue($v->passes()); + } + + public function testValidateWithInvalidAscii() + { + $trans = $this->getIlluminateArrayTranslator(); + $v = new Validator($trans, ['foo' => 'Düsseldorf'], ['foo' => 'ascii']); + $this->assertFalse($v->passes()); + } + + public function testValidateWithValidUlid() + { + $trans = $this->getIlluminateArrayTranslator(); + $v = new Validator($trans, ['foo' => '01gd6r360bp37zj17nxb55yv40'], ['foo' => 'ulid']); + $this->assertTrue($v->passes()); + } + + public function testValidateWithInvalidUlid() + { + $trans = $this->getIlluminateArrayTranslator(); + $v = new Validator($trans, ['foo' => '01gd6r36-bp37z-17nx-55yv40'], ['foo' => 'ulid']); + $this->assertFalse($v->passes()); + } + public static function providesPassingExcludeIfData() { return [