> 백엔드 개발 > PHP 튜토리얼 > php 判断数学里面的大小关系比较是否正确

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

WBOY
풀어 주다: 2016-06-23 13:34:21
원래의
1297명이 탐색했습니다.

现有字符串    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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿