ホームページ  >  記事  >  バックエンド開発  >  PHP は数学における大小関係の比較が正しいかどうかを判断します

PHP は数学における大小関係の比較が正しいかどうかを判断します

WBOY
WBOYオリジナル
2016-06-23 13:34:211252ブラウズ

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


回复讨论(解决方案)

测试下不就知道了

$str='100>88';eval("\$a=".$str.";");var_dump($a);

0dafe548039af1be57519eec267bed15a=-]+$/', $str, $matches))
{
return false;
}
//按照83992e84119b8649428fe2de73af99ef, 2c1debc5fc2186ab444858e642829191=进行切割
$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('/^[a8093152e673feb7aba1828c43532094]=?/', $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('02eea845e67b7d310816b56d885e51566 88')); //true
var_dump(check('10 743475a962b654b541961fe3ddbfa855 9 + 0.9999')); //true
var_dump(check('9 % 7 90e673b0a0dba4d96e57007486434fda 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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。