在逻辑操作中替换eval()php
我在做逻辑验证,比如在逻辑操作中替换eval()php,php,laravel,eval,Php,Laravel,Eval,我在做逻辑验证,比如 $answer = eval("return ".$stringToValidate.";"); 其中$stringToValidate是一个逻辑表达式,如“a”==“b”或100
$answer = eval("return ".$stringToValidate.";");
其中$stringToValidate是一个逻辑表达式,如“a”==“b”或100<200
问题是,当我引入一个无效字符串时,如a=='b'或100,如果使用PHP7,则可以使用ParserError: 错误报告全部
$stringToValidate = "'a == 'b'";
try {
$answer = eval("return ".$stringToValidate.";");
} catch(Exception $e){
return $e->getMessage();
} catch (ParseError $e) {
echo 'Bad request !';
}
编辑:请参见cmbuckley commenta=='b'在我尝试时生成警告,而不是异常。100个更好的副本:-TL;DR use PHP7 and catch ParseError.@cmbuckley干杯,我已将其添加到重复列表中。谢谢,我刚刚注意到将来自己也可以这样做的链接-@ceejayoz是否存在捕获该解析错误的任何形式?
$stringToValidate = "'a == 'b'";
try {
$answer = eval("return ".$stringToValidate.";");
} catch(Exception $e){
return $e->getMessage();
} catch (ParseError $e) {
echo 'Bad request !';
}