【问题标题】:Validate an Expression in PHP在 PHP 中验证表达式
【发布时间】:2015-06-14 06:02:17
【问题描述】:

我有一个textbox,供用户输入表达式。我想验证输入的表达式。有没有办法做到这一点?
例如: (1 * 2) + 3 *4 为真,(1 ** 2) +* 3 为假。
非常感谢。

【问题讨论】:

  • 到目前为止你有什么实现这一目标的?
  • 一旦确定表达式是否有效,您是否打算评估表达式?如果是这样,您应该只问那个问题。
  • @meagar,我只想验证表达式,而不是打算做任何其他事情。非常感谢

标签: php expression


【解决方案1】:

我不知道这是否会有所帮助(您的问题有点含糊*),但有人有 aritmethic 评估器(没有eval!)可用:PHP function to evaluate string like "2-1" as arithmetic 2-1=1

然后也许将结果分配为

$true = <(1 * 2) + 3 *4 result here>;
$false = <(1 ** 2) +* 3 result here>;

并用于验证。

如果您只需要验证字符串,请尝试正则表达式或删除空格的精确字符串匹配。

// Basic string matching.
$expected = '(1*2)+3*4';
$data = <get data from text input to this variable or similar>;

if ($expected == str_replace(' ', '', $data)) {
    return true;
}

...

如果您需要验证格式(例如给定字符串的数学正确性),请尝试使用算术评估器检查字符串是否返回数字:

$value = <use arithmetic evaluator to get the value>;

if (is_numeric($value)) {
    return true;
}

...

* 你能否更清楚地说明这些值应该返回truefalse。是否需要计算到某个数值?字符串是否需要完全匹配?字符串是否不断变化并需要验证为正确的数学表达式?

【讨论】:

    【解决方案2】:

    AFAIK 你将需要使用eval(),除非你想用php_check_syntax() 拉一些恶作剧,这需要你将表达式保存到一个文件中,这看起来很笨拙。

    如果代码中存在语法错误,eval() 将返回 false;如果不是,它将返回null 或提供的表达式的返回值。但是,如果您正在评估一个正常返回 false 的表达式,这会让您感到有些悲伤。

    请注意,使用eval() 将允许任何人将任意 PHP 输入到您的表单中并执行它,这显然是一个非常糟糕的主意,应该非常小心。

    看看这个类似的问题:PHP eval and capturing errors (as much as possible)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多