You are here

public function Regex::getHtmlPattern in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/validator/Constraints/Regex.php \Symfony\Component\Validator\Constraints\Regex::getHtmlPattern()

Converts the htmlPattern to a suitable format for HTML5 pattern. Example: /^[a-z]+$/ would be converted to [a-z]+ However, if options are specified, it cannot be converted.

Pattern is also ignored if match=false since the pattern should then be reversed before application.

@link http://dev.w3.org/html5/spec/single-page.html#the-pattern-attribute

Return value

string|null

File

vendor/symfony/validator/Constraints/Regex.php, line 57

Class

Regex
@Target({"PROPERTY", "METHOD", "ANNOTATION"})

Namespace

Symfony\Component\Validator\Constraints

Code

public function getHtmlPattern() {

  // If htmlPattern is specified, use it
  if (null !== $this->htmlPattern) {
    return empty($this->htmlPattern) ? null : $this->htmlPattern;
  }

  // Quit if delimiters not at very beginning/end (e.g. when options are passed)
  if ($this->pattern[0] !== $this->pattern[strlen($this->pattern) - 1]) {
    return;
  }
  $delimiter = $this->pattern[0];

  // Unescape the delimiter
  $pattern = str_replace('\\' . $delimiter, $delimiter, substr($this->pattern, 1, -1));

  // If the pattern is inverted, we can simply wrap it in
  // ((?!pattern).)*
  if (!$this->match) {
    return '((?!' . $pattern . ').)*';
  }

  // If the pattern contains an or statement, wrap the pattern in
  // .*(pattern).* and quit. Otherwise we'd need to parse the pattern
  if (false !== strpos($pattern, '|')) {
    return '.*(' . $pattern . ').*';
  }

  // Trim leading ^, otherwise prepend .*
  $pattern = '^' === $pattern[0] ? substr($pattern, 1) : '.*' . $pattern;

  // Trim trailing $, otherwise append .*
  $pattern = '$' === $pattern[strlen($pattern) - 1] ? substr($pattern, 0, -1) : $pattern . '.*';
  return $pattern;
}