sin、cosなどの関数を含む、数式を評価する関数をPHPで作成しようとしています。私のアプローチは、フレーズ内の数値、数学演算子、または数学関数ではないすべての文字を削除することです。次に、その文字列を eval() で使用します。問題は、正規表現について、同じ表現内の文字と句の両方を否定するのに十分な知識がないことです。
これまでのところ、これは私が持っているものです:
$input = preg_replace("/[^0-9+\-.*\/()sincota]/", "", $input);
明らかに、sin、cos、および tan の文字は、(sin、cos、および tanというフレーズのみを許可するのではなく) 入力式で任意の順序で使用できます。この関数をさらに拡張してさらに多くの文字や関数を含めると、悪意のあるユーザーがアプリとの巧妙なやり取りを通じてほぼすべての PHP コマンドを実行できるため、セキュリティ リスクがさらに大きくなります。
正規表現を修正してこの問題を解決する方法を誰か教えてもらえますか?