当前位置: 首页 > 面试题库 >

如何在数学上评估“ 2-1”之类的字符串以产生“ 1”?

颜君浩
2023-03-14
问题内容

我只是想知道PHP是否具有可以接受类似字符串2-1并产生其算术结果的函数?

还是我必须手动执行此操作explode()才能获得算术运算符的左右值?


问题答案:

我知道这个问题很旧,但是昨晚我在寻找不相关的问题时遇到了这个问题,这里的每个答案都是不好的。不只是不好,
不好。我在这里给出的示例将来自我于2005年创建的一个类,由于这个问题,该类花了过去几个小时针对PHP5进行了更新。其他系统确实存在,并且在发布此问题之前就已经存在,因此eval当PHP的警告是:时,我很困惑为什么这里的每个答案都告诉您使用:

eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证了除了使用此构造之外没有其他选择,请特别注意不要在未经适当验证的情况下将任何用户提供的数据传递到其中。

在进入示例之前,获取要使用的类的位置位于PHPClasses或GitHub上。无论是eos.class.phpstack.class.php是必需的,但可以在同一个文件相结合。

使用这样的类的原因是它包括postfix(RPN)解析器和infix,然后是RPN解算器。有了这些,您就不必使用该eval功能并使系统容易受到漏洞的攻击。有了这些类之后,下面的代码就可以解决一个简单的(到更复杂的)方程式,例如您的2-1示例。

require_once "eos.class.php";
$equation = "2-1";
$eq = new eqEOS();
$result = $eq->solveIF($equation);

而已!您可以对大多数方程使用这样的解析器,无论它多么复杂和嵌套,都无需诉诸“邪恶eval”。

我不太确定我之前发现的其他人发生了什么-之前在GitHub上也遇到了另一个人,不幸的是我没有将其添加为书签,但这与包含解析器的大型float操作有关。

无论如何,我想确保在此处求解PHP方程式的答案不会指向所有未来的搜索者,eval因为这是Google搜索的顶部。^^



 类似资料:
  • 问题内容: 如何解析和评估字符串(例如)中的数学表达式而不调用其数值? 在该示例中,我希望函数接受并返回。 问题答案: 我最终选择了该解决方案,该解决方案可用于对正整数和负整数进行求和(对正则表达式进行少许修改也可用于十进制): 我不确定它是否比eval()快,但是由于必须多次执行该操作,因此与创建javascript编译器实例负载相比,运行此脚本要舒服得多

  • 问题内容: : 1 < 2 < 3 true : 3 > 2 > 1 false … … : 3 > 2 && 2 > 1 true 也许我真的在考虑问题,但是我认为它们都会评估为真。为什么不呢? 问题答案: 因为评估为小于, 但评估为不大于

  • 本文向大家介绍Java评估算术字符串,包括了Java评估算术字符串的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 主持人注意: 请不要编辑代码或删除此声明。空格模式可能是问题的一部分,因此不应不必要地对其进行篡改。如果您处于“空白无关紧要”的阵营中,则应该能够原样接受代码。 有可能用JavaScript 评估吗? 这是一家大型科技公司提出的面试问题。它发生在两周前,但我仍在努力寻找答案。我

  • 问题内容: 只是试图找出执行作为字符串传递的数学运算的正确和安全的方法。在我的场景中,它是从图像EXIF数据中获取的值。 经过很少的研究,我发现了两种解决方法。 首先,使用: 第二,使用: 这两个示例都需要字符串清除以避免恶意代码执行。还有其他更短的方法吗? 问题答案: 这可能会有所帮助。 http://www.phpclasses.org/browse/package/2695.html 需要下

  • 问题内容: 我有一个代表路径的字符串。由于此应用程序在Windows,OSX和Linux上使用,因此我们定义了环境变量以正确映射来自不同文件系统的卷。结果是: 我想做的是评估字符串中的环境变量,以便将它们替换为各自的卷名。我是否缺少特定的命令,还是必须采取并手动替换字符串? 问题答案: 使用os.path.expandvars扩展字符串中的环境变量,例如: