php 判断数学里面的大小关系比较是否正确
请教各位前辈,我如何在PHP里判断这写数学意义上的公式是否合理??
回复讨论(解决方案)
测试下不就知道了
$str='100>88';eval("\$a=".$str.";");var_dump($a);
0
$str='100>88';eval("\$a=".$str.";");var_dump($a);
0
答案是我要的,谢谢。
function check($str)
{
//去除所有空格
$str = str_replace(' ', '', $str);
//检测字符串是否含有特殊字符,因为要用到eval函数,需要禁止执行非计算的操作
//只允许使用数字、小数点、加减乘除和求余,大于号,小于号,等号
if(!preg_match('/^[0-9.+*\/%=-]+$/', $str, $matches))
{
return false;
}
//按照, =进行切割
$left = '';
$right = '';
$opt = '';
while($str)
{
if(!$left)
{
//获取算术式左边值
preg_match('/^[0-9.+*\/%-]+/', $str, $matches);
if(!is_array($matches) || !isset($matches[0]))
{
return false;
}
$left = $matches[0];
$str = substr($str, strlen($left));
}
//获取算术式操作符
preg_match('/^[]=?/', $str, $matches);
if(!is_array($matches) || !isset($matches[0]))
{
return false;
}
$opt = $matches[0];
$str = substr($str, strlen($opt));
//获取算术式右边值
preg_match('/^[0-9.+*\/%-]+/', $str, $matches);
if(!is_array($matches) || !isset($matches[0]))
{
return false;
}
$right = $matches[0];
$str = substr($str, strlen($right));
//算术式比较
eval('$result = ' . $left . $opt . $right . ';');
if(false === $result)
{
return false;
}
//将右边值赋值给下一次比较的左边值
$left = $right;
}
return true;
}
//举例
var_dump(check('0 var_dump(check('100 > 88')); //true
var_dump(check('10 var_dump( check('10 var_dump(check('10 > 9 + 0.9999')); //true
var_dump(check('9 % 7 var_dump(check('1 > 1')); //false
var_dump(check('23 var_dump(check('1 var_dump(check('1 var_dump(check('2
忘记排版了,不知道有没有更简单的了
=-]+$/', $str, $matches)) { return false; } //按照, =进行切割 $left = ''; $right = ''; $opt = ''; while($str) { if(!$left) { //获取算术式左边值 preg_match('/^[0-9.+*\/%-]+/', $str, $matches); if(!is_array($matches) || !isset($matches[0])) { return false; } $left = $matches[0]; $str = substr($str, strlen($left)); } //获取算术式操作符 preg_match('/^[]=?/', $str, $matches); if(!is_array($matches) || !isset($matches[0])) { return false; } $opt = $matches[0]; $str = substr($str, strlen($opt)); //获取算术式右边值 preg_match('/^[0-9.+*\/%-]+/', $str, $matches); if(!is_array($matches) || !isset($matches[0])) { return false; } $right = $matches[0]; $str = substr($str, strlen($right)); //算术式比较 eval('$result = ' . $left . $opt . $right . ';'); if(false === $result) { return false; } //将右边值赋值给下一次比较的左边值 $left = $right; } return true;}//举例var_dump(check('0 88')); //truevar_dump(check('10 9 + 0.9999')); //truevar_dump(check('9 % 7 1')); //falsevar_dump(check('23
上一篇: 到底该不该继续使用MySQL数据库?
下一篇: 打开或者创建数据库的操作应该放在哪里?