我正在尝试在 PHP 中创建一个函数来评估数学表达式——包括诸如 sin、cos 等函数。我的方法是删除短语中不是数字、数学运算符或数学函数的所有字符,并且然后在 eval() 中使用该字符串。问题是我对正则表达式的了解不够,无法否定同一表达式中的字符和短语。
到目前为止,这就是我所拥有的:
$input = preg_replace("/[^0-9+\-.*\/()sincota]/", "", $input);
显然,sin、cos 和 tan 的字符可以在输入表达式中以任何顺序使用(而不是只允许使用短语 sin、cos 和 tan)。如果我进一步扩展此功能以包含更多字符和功能,则会带来更大的安全风险,因为恶意用户将能够通过与应用程序的巧妙交互来执行几乎任何 PHP 命令。
谁能告诉我如何修复我的正则表达式并消除这个问题?