Zend_Validator_Regex抛出错误:使用模式时出现内部错误

时间:2012-07-13 07:16:06

标签: php regex zend-framework zend-validate

  

消息:使用模式时出现内部错误“(http://)?(www。)?(youtu)((be.com)|(。be))/.*”

$element = new Zend_Form_Element_Text($this->name);
$element->setRequired(true)
        ->setLabel(FileTypes::$names[$this->fileType])
        ->setDescription('Paste YouTube link here')
        ->setDecorators(FormDecorators::$simpleElementDecorators)
        ->addValidator('regex', false, '(http://)?(www\.)?(youtu)((be\.com)|(\.be))/.*');

即使使用简单的正则表达式也会引发错误。

3 个答案:

答案 0 :(得分:1)

您是否正确验证了您的正则表达式?在正则表达式工具中试一试,看看它是否会产生任何错误。一个不错的工具应该告诉你为什么你的正则表达式是无效的。

我见过的大多数正则表达式通常都带有某种特征,通常是'/'。你的事实不是可能与你得到的错误有关。

您还应该记住,尽管PHP的正则表达式与Perl类似,但存在一些差异。在这种情况下它们可能无关紧要,但你应该意识到它们。 http://www.php.net/manual/en/reference.pcre.pattern.differences.php

答案 1 :(得分:0)

试试这个,你需要将你的模式放在一个数组中并包含分隔符。

$element = new Zend_Form_Element_Text($this->name);
                $element->setRequired(true)
                        ->setLabel(FileTypes::$names[$this->fileType])
                        ->setDescription('Paste YouTube link here')
                        ->setDecorators(FormDecorators::$simpleElementDecorators)
                        ->addValidator('regex', false, array(
                           'pattern' => '/(http://)?(www\.)?(youtu)((be\.com)|(\.be))/.*/'                                                                    
                         ));

答案 2 :(得分:0)

在http:

中转义斜杠
->addValidator('regex', false, '(http:\/\/)?(www\.)?(youtu)((be\.com)|(\.be))\/.*');