Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Validator/Constraints/Regex.php
Строк: 126
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentValidatorConstraints;

use 
SymfonyComponentValidatorConstraint;

/**
 * @Annotation
 * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @api
 */
class Regex extends Constraint
{
    public 
$message 'This value is not valid.';
    public 
$pattern;
    public 
$htmlPattern;
    public 
$match true;

    
/**
     * {@inheritdoc}
     */
    
public function getDefaultOption()
    {
        return 
'pattern';
    }

    
/**
     * {@inheritdoc}
     */
    
public function getRequiredOptions()
    {
        return array(
'pattern');
    }

    
/**
     * 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 string|null
     */
    
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($pattern1) : '.*'.$pattern;

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

        return 
$pattern;
    }
}
Онлайн: 1
Реклама