Adding a pattern property to a schema is supposed to validate a value using the provided regular expression. This is done in generated code using StringPatternConstraint:
class StringPatternConstraint {
public static function check(string $input, string $pattern, string $pointer): void {
$match = \preg_match("/".$pattern."/", $input);
/* ... */
However, this fails if $pattern contains a forward slash, because that collides with the / delimiter used here. A workaround is to use a double backslash when defining pattern in the schema so that it becomes \/ in the call to preg_match (this does change the meaning of the schema for other validators).
I thought that this was a case where we simply needed to use preg_quote, however that escapes all special characters in $pattern, not just the delimiter.
Adding a
patternproperty to a schema is supposed to validate a value using the provided regular expression. This is done in generated code usingStringPatternConstraint:However, this fails if
$patterncontains a forward slash, because that collides with the/delimiter used here. A workaround is to use a double backslash when definingpatternin the schema so that it becomes\/in the call topreg_match(this does change the meaning of the schema for other validators).I thought that this was a case where we simply needed to use
preg_quote, however that escapes all special characters in$pattern, not just the delimiter.