我有一个textbox
,用于用户输入表达式。我想验证输入的表达式。有办法做到这一点吗
例如:(1*2)+3*4为True,(1**2)+*3为false
非常感谢。
AFAIK您将需要使用eval()
,除非您想用php_check_syntax()
进行一些恶作剧,因为这需要将表达式保存到一个文件中,这似乎很难处理。
如果代码中存在语法错误,eval()
将返回false
;否则,它将返回null
或所提供表达式的返回值。不过,如果你在评估一个正常返回false的表达式,这会让你感到悲伤。
请注意,使用eval()
将允许任何人将任意PHP输入到您的表单中并执行它,这显然是一个非常糟糕的想法,应该非常小心。
看看这个类似的问题:PHP评估和捕获错误(尽可能多)
我不知道这是否有任何帮助(你的问题有点模糊*),但有人有一个算术计算器(没有eval
!)可用:PHP函数来评估字符串,比如"2-1";作为算术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;
}
...
*您能更清楚地说明这些值中应该返回true
或false
的内容吗。是否需要计算到某个数值?字符串需要完全匹配吗?字符串是否不断变化,是否需要验证为正确的数学表达式?