PHP preg_match数学函数

时间:2010-05-26 21:08:44

标签: php regex

我正在编写一个脚本,允许用户输入一个数学语句的字符串,然后进行评估。然而,我遇到了障碍。我无法弄清楚如何使用preg_match来禁止包含变量的语句。

使用此$calc = create_function("", "return (" . $string . ");" ); $calc();,允许用户输入将被评估的字符串,但只要放置echo 'foo';之类的字符串代替变量$string,它就会崩溃。

我见过this post,但它不允许在字符串中使用数学函数,例如$string = 'sin(45)';

4 个答案:

答案 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”。