我有以下代码:

$sfKeyword = new Zend_Form_SubForm();

$tfKeyword = $sfKeywords->createElement('text', 'keyword');
$tfKeyword->setLabel('Keyword: ');
$tfKeyword->addValidator('regex', false, array('/[a-zA-Z_][a-zA-Z_0-9]*/'));

此正则表达式可验证关键字,并应仅允许a-z,A-Z和_作为第一个字符,然后另外允许数字0-9,零个或多个出现。

但是,当输入的字符串之间使用空格时,该字符串将通过验证程序,而不会出现错误消息。事实并非如此。

注意,我也尝试过
'/[a-zA-Z_][a-zA-Z_0-9]*/s'

但没有区别(如预期)。

正则表达式(或Zend Framework)有什么问题?

最佳答案

问题是您的正则表达式未 anchor 定。这意味着只要字符串的某个部分与正则表达式匹配,该正则表达式就会匹配。相反, anchor 定它:

/^[a-zA-Z_][a-zA-Z_0-9]*$/

开头的^字符表示“字符串的开头”,结尾的$表示“字符串的结尾”。因此,现在它将匹配以[a-zA-Z_]开头,然后是一个或多个[a-zA-Z_0-9]的任何字符串,直到该字符串的末尾。

关于regex - Zend Framework:为什么空白对照我的正则表达式进行验证?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4739590/

10-15 07:55