首頁 > 後端開發 > php教程 > php 判断数学里面的大小关系比较是否正确

php 判断数学里面的大小关系比较是否正确

WBOY
發布: 2016-06-23 13:34:21
原創
1296 人瀏覽過

现有字符串    088
请教各位前辈,我如何在PHP里判断这写数学意义上的公式是否合理??


回复讨论(解决方案)

测试下不就知道了

$str='100>88';eval("\$a=".$str.";");var_dump($a);
登入後複製
登入後複製

0<99<100不行,因为不符合php语言写法$a=0<99<100;这样肯定报错

$str='100>88';eval("\$a=".$str.";");var_dump($a);
登入後複製
登入後複製

0<99<100不行,因为不符合php语言写法$a=0<99<100;这样肯定报错



答案是我要的,谢谢。

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<99<100')); //true
var_dump(check('100 > 88')); //true
var_dump(check('10 < 22 < 3*8 < 5.6*5 < 100 - 30')); //true
var_dump( check('10 < 9.9999')); //false
var_dump(check('10 > 9 + 0.9999')); //true
var_dump(check('9 % 7 <= 2 <= 2')); //true
var_dump(check('1 > 1')); //false
var_dump(check('23<32<77')); //true
var_dump(check('1 <= 1 <= 1')); //true
var_dump(check('1 <= 1 < 1')); //false
var_dump(check('2 < 2.00000')); //false

忘记排版了,不知道有没有更简单的了

<?phpfunction 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<99<100')); //truevar_dump(check('100 > 88')); //truevar_dump(check('10 < 22 < 3*8 < 5.6*5 < 100 - 30')); //truevar_dump( check('10 < 9.9999')); //falsevar_dump(check('10 > 9 + 0.9999')); //truevar_dump(check('9 % 7 <= 2 <= 2')); //truevar_dump(check('1 > 1')); //falsevar_dump(check('23<32<77')); //truevar_dump(check('1 <= 1 <= 1')); //truevar_dump(check('1 <= 1 < 1')); //falsevar_dump(check('2 < 2.00000')); //false
登入後複製

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板