Preg匹配导致错误的简单数学公式

时间:2013-10-22 23:44:33

标签: php regex math preg-match

出于某些原因,在使用preg_match('/^[-+*/^()\s0-9]+$/', $formula时我会抛出Unknown modifier '^'尝试运行7 + 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 =/

1 个答案:

答案 0 :(得分:0)

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

好的,基于评论,是的,你是对的,只需要转义分隔符。逃避休息不会伤害表达,所以答案仍然有效。最小且也有效的表达式是/^[-+*\/^()\s0-9]+$/i