2013-10-22 2 views
0

과 일치 어떤 이유로 preg_match('/^[-+*/^()\s0-9]+$/', $formula을 던집니다. Unknown modifier '^'을 던집니다. 7 + 6c을 실행하려고 할 때 허위로 돌아가려고합니다. ^이 세트의 시작을 의미하는 예약 된 문자이기 때문에Preg 오류를 일으키는 간단한 수학 공식

전체 조각

당신의 키워드와 일치하는, /^[-+*/^()\s0-9]+$/i을 바탕으로
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

+0

작동하지 않는 것 같습니까 = – ehime

+0

정확히 어떤 오류가 발생합니까? 게시 한 오류에서 오류가 수정되지만 오류 단계는 ' 당신이 보여준 코드와 일치하지 않는 것 같아요 – Jon

+0

만약 위의 조건이 맞지 않는다면 위와 같이 에러가 기록 될 것입니다. 당신의 코드에서 치명적인 에러는'preg_match() : Unknown modifier '\' \ ' – ehime