/** * {@inheritdoc} */ public function guard($value, Field $field) { parent::guard($value, $field); if ($pattern = $field->getPattern()) { Assertion::regex($value, $pattern, null, $field->getName()); } switch ($field->getFormat()->getValue()) { case Format::UNKNOWN: break; case Format::DATE: Assertion::regex($value, '/^\\d{4}-\\d{2}-\\d{2}$/', null, $field->getName()); break; case Format::DATE_TIME: Assertion::true(DateUtils::isValidISO8601Date($value), sprintf('Field [%s] must be a valid ISO8601 date-time. Format must match one of [%s], [%s] or [%s].', $field->getName(), DateUtils::ISO8601_ZULU, DateUtils::ISO8601, \DateTime::ISO8601), $field->getName()); break; case Format::SLUG: Assertion::regex($value, '/^([\\w\\/-]|[\\w-][\\w\\/-]*[\\w-])$/', null, $field->getName()); break; case Format::EMAIL: Assertion::email($value, null, $field->getName()); break; case Format::HASHTAG: Assertion::true(HashtagUtils::isValid($value), sprintf('Field [%s] must be a valid hashtag. @see HashtagUtils::isValid', $field->getName()), $field->getName()); break; case Format::IPV4: case Format::IPV6: /* * todo: need separate assertion for ipv4 and ipv6 */ Assertion::url('http://' . $value, sprintf('Field [%s] must be a valid [%s].', $field->getName(), $field->getFormat()->getValue()), $field->getName()); break; case Format::HOSTNAME: case Format::URI: case Format::URL: /* * fixme: need better handling for HOSTNAME, URI and URL... assertion library just has one "url" handling * but we really need separate ones for each of these formats. right now we're just prefixing * the value with a http so it looks like a url. this won't work for thinks like mailto: * urn:, etc. */ if (false === strpos($value, 'http')) { $value = 'http://' . $value; } Assertion::url($value, sprintf('Field [%s] must be a valid [%s].', $field->getName(), $field->getFormat()->getValue()), $field->getName()); break; case Format::UUID: Assertion::uuid($value, null, $field->getName()); break; default: break; } }
public function testIsValidISO8601Date() { $this->assertTrue(DateUtils::isValidISO8601Date('2012-12-14T20:24:01.123456+00:00')); $this->assertTrue(DateUtils::isValidISO8601Date('2012-12-14T20:24:01+00:00')); $this->assertTrue(DateUtils::isValidISO8601Date('2012-12-14T20:24:01.123456Z')); $this->assertTrue(DateUtils::isValidISO8601Date('2012-12-14T20:24:01Z')); $this->assertTrue(DateUtils::isValidISO8601Date('2012-12-14T20:24:01.123456')); $this->assertFalse(DateUtils::isValidISO8601Date('2012-12-14T20:24:01.123456+00:00AA')); $this->assertFalse(DateUtils::isValidISO8601Date('2012-12-14T20:24:0100:00')); $this->assertFalse(DateUtils::isValidISO8601Date('cats')); $this->assertFalse(DateUtils::isValidISO8601Date('-1 day')); $this->assertFalse(DateUtils::isValidISO8601Date('1234567890')); }
/** * {@inheritdoc} */ public function guard($value, Field $field) { Assertion::integer($value, null, $field->getName()); Assertion::true(DateUtils::isValidTimestamp($value), sprintf('Field [%s] value [%d] is not a valid unix timestamp.', $field->getName(), $value), $field->getName()); }