出于某些原因,在使用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 =/
答案 0 :(得分:0)
根据您的匹配条件/^[-+*/^()\s0-9]+$/i
,您将遇到错误,因为^
是一个保留字符,表示集合的开头。所以你在正则表达式中匹配它,你需要逃避它。即。 /^[-+*/\^()\s0-9]+$/i
但是,-+*
也是保留的,即使在集合中也具有特殊含义,因此也需要对其进行转义。 /^[\-\+\*\/\^()\s0-9]+$/i
好的,基于评论,是的,你是对的,只需要转义分隔符。逃避休息不会伤害表达,所以答案仍然有效。最小且也有效的表达式是/^[-+*\/^()\s0-9]+$/i