Use regular expressions for validation
This commit is contained in:
parent
a0f4f0546f
commit
e6a4d5d508
|
@ -35,25 +35,44 @@ use Symfony\Component\Validator\Validation;
|
||||||
abstract class Entity
|
abstract class Entity
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Check if a string does not contain any whitespaces.
|
* Check if a string is a valid URL.
|
||||||
|
*
|
||||||
|
* @param string $url The URL
|
||||||
|
*
|
||||||
|
* @return string The validated URL
|
||||||
|
*
|
||||||
|
* @throws ValidationFailedException
|
||||||
|
*/
|
||||||
|
protected function validateUrl(string $url): string
|
||||||
|
{
|
||||||
|
$url = trim($url);
|
||||||
|
$validator = Validation::createValidator();
|
||||||
|
$violations = $validator->validate($url, new Assert\Url());
|
||||||
|
if ($violations->count() > 0) {
|
||||||
|
throw new ValidationFailedException(null, $violations);
|
||||||
|
}
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a string matches a given regular expression.
|
||||||
*
|
*
|
||||||
* @param string $string The string
|
* @param string $string The string
|
||||||
|
* @param string $regEx The regular expression
|
||||||
*
|
*
|
||||||
* @return string The validated string
|
* @return string The validated string
|
||||||
*
|
*
|
||||||
* @throws ValidationFailedException
|
* @throws ValidationFailedException
|
||||||
*/
|
*/
|
||||||
protected function validateNoWhitespace(string $string): string
|
protected function validateRegEx(string $string, string $regEx): string
|
||||||
{
|
{
|
||||||
$string = trim($string);
|
|
||||||
$validator = Validation::createValidator();
|
$validator = Validation::createValidator();
|
||||||
$violations = $validator->validate(
|
$violations = $validator->validate(
|
||||||
$string,
|
$string,
|
||||||
[
|
[
|
||||||
new Assert\Regex([
|
new Assert\Regex([
|
||||||
'pattern' => '/\s/',
|
'pattern' => $regEx,
|
||||||
'match' => false,
|
'message' => 'This value does not match the regular expression "{{ pattern }}".'
|
||||||
'message' => 'This value contains whitespaces.'
|
|
||||||
]),
|
]),
|
||||||
new Assert\NotBlank()
|
new Assert\NotBlank()
|
||||||
]
|
]
|
||||||
|
@ -64,26 +83,6 @@ abstract class Entity
|
||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if a string is a valid URI.
|
|
||||||
*
|
|
||||||
* @param string $uri The URI
|
|
||||||
*
|
|
||||||
* @return string The validated URI
|
|
||||||
*
|
|
||||||
* @throws ValidationFailedException
|
|
||||||
*/
|
|
||||||
protected function validateUri(string $uri): string
|
|
||||||
{
|
|
||||||
$uri = trim($uri);
|
|
||||||
$validator = Validation::createValidator();
|
|
||||||
$violations = $validator->validate($uri, new Assert\Url());
|
|
||||||
if ($violations->count() > 0) {
|
|
||||||
throw new ValidationFailedException(null, $violations);
|
|
||||||
}
|
|
||||||
return $uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a string is well-formed XML.
|
* Check if a string is well-formed XML.
|
||||||
*
|
*
|
||||||
|
|
|
@ -97,7 +97,7 @@ class Format extends Entity
|
||||||
public function setNamespace(string $namespace): void
|
public function setNamespace(string $namespace): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->namespace = $this->validateUri($namespace);
|
$this->namespace = $this->validateUrl($namespace);
|
||||||
} catch (ValidationFailedException $exception) {
|
} catch (ValidationFailedException $exception) {
|
||||||
throw $exception;
|
throw $exception;
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ class Format extends Entity
|
||||||
public function setSchema(string $schema): void
|
public function setSchema(string $schema): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->xmlSchema = $this->validateUri($schema);
|
$this->xmlSchema = $this->validateUrl($schema);
|
||||||
} catch (ValidationFailedException $exception) {
|
} catch (ValidationFailedException $exception) {
|
||||||
throw $exception;
|
throw $exception;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ class Format extends Entity
|
||||||
public function __construct(string $prefix, string $namespace, string $schema)
|
public function __construct(string $prefix, string $namespace, string $schema)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->prefix = $this->validateNoWhitespace($prefix);
|
$this->prefix = $this->validateRegEx($prefix, '/^[A-Za-z0-9\-_\.!~\*\'\(\)]+$/');
|
||||||
$this->setNamespace($namespace);
|
$this->setNamespace($namespace);
|
||||||
$this->setSchema($schema);
|
$this->setSchema($schema);
|
||||||
} catch (ValidationFailedException $exception) {
|
} catch (ValidationFailedException $exception) {
|
||||||
|
|
|
@ -245,7 +245,11 @@ class Record extends Entity
|
||||||
public function __construct(string $identifier, Format $format, ?string $data = null, ?DateTime $lastChanged = null)
|
public function __construct(string $identifier, Format $format, ?string $data = null, ?DateTime $lastChanged = null)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->identifier = $this->validateNoWhitespace($identifier);
|
$this->identifier = $this->validateRegEx(
|
||||||
|
$identifier,
|
||||||
|
// xs:anyURI
|
||||||
|
'/^(([a-zA-Z][0-9a-zA-Z+\\-\\.]*:)?\/{0,2}[0-9a-zA-Z;\/?:@&=+$\\.\\-_!~*\'()%]+)?(#[0-9a-zA-Z;\/?:@&=+$\\.\\-_!~*\'()%]+)?$/'
|
||||||
|
);
|
||||||
$this->setFormat($format);
|
$this->setFormat($format);
|
||||||
$this->setContent($data);
|
$this->setContent($data);
|
||||||
$this->setLastChanged($lastChanged);
|
$this->setLastChanged($lastChanged);
|
||||||
|
|
|
@ -163,6 +163,18 @@ class Set extends Entity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the name for this set.
|
||||||
|
*
|
||||||
|
* @param string $name The name
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setName(string $name): void
|
||||||
|
{
|
||||||
|
$this->name = trim($name);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get new entity of set.
|
* Get new entity of set.
|
||||||
*
|
*
|
||||||
|
@ -175,8 +187,8 @@ class Set extends Entity
|
||||||
public function __construct(string $spec, string $name, string $description = '')
|
public function __construct(string $spec, string $name, string $description = '')
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->spec = $this->validateNoWhitespace($spec);
|
$this->spec = $this->validateRegEx($spec, '/^([A-Za-z0-9\-_\.!~\*\'\(\)])+(:[A-Za-z0-9\-_\.!~\*\'\(\)]+)*$/');
|
||||||
$this->name = trim($name);
|
$this->setName($name);
|
||||||
$this->setDescription($description);
|
$this->setDescription($description);
|
||||||
$this->records = new ArrayCollection();
|
$this->records = new ArrayCollection();
|
||||||
} catch (ValidationFailedException $exception) {
|
} catch (ValidationFailedException $exception) {
|
||||||
|
|
Loading…
Reference in New Issue