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

稻庄 2015-05-20 05:44:08
现有字符串 0<99<100 或者 100>88
请教各位前辈,我如何在PHP里判断这写数学意义上的公式是否合理??
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏之冰雪 2015-05-21
  • 打赏
  • 举报
回复
忘记排版了,不知道有没有更简单的了

<?php
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
夏之冰雪 2015-05-21
  • 打赏
  • 举报
回复
<?php 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
稻庄 2015-05-21
  • 打赏
  • 举报
回复
引用 2 楼 ayayad 的回复:

$str='100>88';
eval("\$a=".$str.";");
var_dump($a);
0<99<100不行,因为不符合php语言写法$a=0<99<100;这样肯定报错
答案是我要的,谢谢。
ayayad 2015-05-20
  • 打赏
  • 举报
回复

$str='100>88';
eval("\$a=".$str.";");
var_dump($a);
0<99<100不行,因为不符合php语言写法$a=0<99<100;这样肯定报错
ingpj 2015-05-20
  • 打赏
  • 举报
回复
测试下不就知道了

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧