0

出于某种原因,在使用preg_match('/^[-+*/^()\s0-9]+$/', $formulaI throw an Unknown modifier '^'While trying to run7 + 6c时,我会返回错误信息?

完整片段

if (! preg_match('/^[-+*/^()\s0-9]+$/i', $formula )) 
{
    $this->log(array('fatal', $formula, 'Contains unacceptable values...'));
}

$formula = '(7 + 6) / 9'; # 1
$formula = '7 * 6 ^ 2' # 252 
$formula = '1c + 2c' # boom, but no trap =/
4

1 回答 1

0

根据您的匹配条件,/^[-+*/^()\s0-9]+$/i您将遇到错误,因为^它是一个保留字符,表示集合的开头。所以你在正则表达式中匹配它,你需要转义它。IE。/^[-+*/\^()\s0-9]+$/i但是,-+*即使在集合中,它们也是保留的并且具有特殊含义,因此也需要对其进行转义。/^[\-\+\*\/\^()\s0-9]+$/i

好的,根据评论,是的,你是对的,只有分隔符需要转义。不过,转义其余部分也不会损害表达,因此答案仍然有效。最小且有效的表达式是/^[-+*\/^()\s0-9]+$/i

于 2013-10-22T23:52:50.777 回答