我正在编写一个脚本,允许用户输入一个数学语句的字符串,然后进行评估。然而,我遇到了障碍。我无法弄清楚如何使用preg_match来禁止包含变量的语句。
使用此$calc = create_function("", "return (" . $string . ");" ); $calc();
,允许用户输入将被评估的字符串,但只要放置echo 'foo';
之类的字符串代替变量$string
,它就会崩溃。
我见过this post,但它不允许在字符串中使用数学函数,例如$string = 'sin(45)';
。
答案 0 :(得分:1)
对于在PHP中实现的基于堆栈的解析器,它使用Djikstra的分流码算法将中缀转换为后缀表示法,并且支持具有不同数量参数的函数,您可以查看PHPExcel计算的源代码引擎(并且不使用eval)
另请查看对this question
的回复答案 1 :(得分:0)
您需要允许数学函数的复杂程度如何?如果你只需要基本的数学,那么你可能只能允许空格+字符0123456789.+/-*
或其他类似的东西。
然而,一般情况下,使用语言的eval
类型功能来做数学可能是一个坏主意。
答案 2 :(得分:0)
类似的东西:
^([\d\(\)\+\-*/ ,.]|sin\(|cos\(|sqrt\(|...)+$
只允许数字,括号,数学运算和提供的数学函数。但它不会检查提供的表达式是否有效,因此仍然可以接受+++sin()))333(((
之类的内容。
答案 3 :(得分:0)
我想知道这class会对你有帮助吗?发现在Google上搜索“php math expressions”。