2013-10-22 62 views
0

由於某種原因,當使用preg_match('/^[-+*/^()\s0-9]+$/', $formula我扔Unknown modifier '^'試圖運行7 + 6c時,我會回到我的知識?Preg匹配一個簡單的數學公式導致錯誤

全段

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

根據您的匹配標準,/^[-+*/^()\s0-9]+$/i,你會在一個錯誤,因爲^是保留漢字意爲一組開始運行。所以你用正則表達式來匹配它,你需要逃避它。即。 /^[-+*/\^()\s0-9]+$/i但是,-+*也是保留的,即使在集合內也有特殊含義,所以這些也需要被轉義。 /^[\-\+\*\/\^()\s0-9]+$/i

好吧,根據評論,是的,你是正確的,只有分隔符需要逃脫。逃脫其餘的不會傷害表達式,所以答案仍然有效。表達式是最小的也是有效的/^[-+*\/^()\s0-9]+$/i

+0

看起來沒有工作=( – ehime

+0

你到底有什麼錯誤嗎?從你發佈的錯誤,它應該努力修復它,但錯誤步驟不會'我想你是否符合你所顯示的代碼 – Jon

+0

我想如果如果上述標準不匹配,就會如上所述記錄一個錯誤,我從代碼中得到的致命錯誤是'preg_match():Unknown modifier'\ \'' – ehime