如何使用php eval()用垂直线(|)求解数学方程

所以我有一个算法创建者,我的用户可以使用可能变量列表中的变量创建算法。
算法 他们创建需要进行验证,所以我用“1”替换变量只是为了检查它们是否有效并返回一个数字而不会产生任何错误。
我的问题是我需要它可以创建一个像< /p>
nn

(0.5*(1+7-|1-7|))

nn

这个问题是 垂直线(|),用于获取方程中的绝对值。 当我将此等式发送到eval()时,它返回此错误:</ p>


解析错误:语法错误,意外“|” 在controller.php(425)中:
eval()'代码在第1行</ p>
</ blockquote>

是否有数学替代方法来获取我可以使用的绝对值 这里或有没有办法逃避这个角色,这样它就不会出错但是仍能正确地计算方程?</ p>

更新</ strong>
结束@ AbraCadaver的建议并且做了</ p>

  $ string = preg_replace('/ \ |([\ d .-] +)\ | /','abs($ 1)',$ string  ); 
</ code> </ pre>
</ div>

展开原文

原文

So I have an algorithm creator where my users can create algorithms using variables from a list of possible variables. The algorithms they create need to be validated, so I substitute the variables with "1" just to check if they're valid and return a number without creating any errors. My problem is that I need it to be possible to create an algorithm like

(0.5*(1+7-|1-7|))

The issue with this is the vertical line (|) which is used to get the absolute value of the equation in it. When I send this equation to eval() it returns this error:

Parse error: syntax error, unexpected '|' in controller.php(425) : eval()'d code on line 1

Is there a math alternative to get the absolute value that I could use here or is there any way to escape this character so that it doesn't give an error but still does the equation correctly?

UPDATE ended up taking @AbraCadaver's advice and did

$string = preg_replace('/\|([\d.-]+)\|/', 'abs($1)', $string);

duancan1950
duancan1950 谢谢@AbraCadaver我实际上是试图避免这样做,但它似乎工作正常,所以我会离开它。谢谢
一年多之前 回复
duanpanzhu2910
duanpanzhu2910 $string=preg_replace('/\|([\d.-]+)\|/','abs($1)',$string);
一年多之前 回复
dongyin8009
dongyin8009 您可以接受用户的输入,通过char查询它,当您检测到第一个|时,开始存储下一个字符,直到找到另一个字符,然后将存储的值放入abs()...或类似的东西
一年多之前 回复
douyuan4825
douyuan4825 感谢@AbraCadaver,但我不能在这个算法中使用php函数,这是用数学运算符和方程式的用户输入,用户不会知道写那个,我阻止他们这样做。我正在从算法中删除所有文本,以便与eval()没有任何有趣的业务
一年多之前 回复
doomm4711
doomm4711 php.net/manual/en/function.abs.php
一年多之前 回复
dougupang0901
dougupang0901 |在PHP中没有做你想要的,它是一个按位OR运算符。试试php.net/manual/en/function.abs.php
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐