[英]Restrict text field to mathematical expressions - Convert String to mathematical expression
如何限制TextField
的输入,使其只能包含数学表达式?
可接受的输入为:
“ 3 + 5”
“ -5 + 6”
“ 3/2(6 * 4)”
“ 6--5”
“ + 5-3”
等等..
拒绝的输入将是:
“ 5 +++ 3”
“ 6(7)”
“ 6-6-+-7”
等等。
基本上; 我希望将其限制为语法是编程语言通常用于评估数学表达式的语法,有点像您希望从日常计算器中输入的语法。
我正在编写一个程序,希望用户能够在文本框中输入数字和/或计算,而不必使用计算器来完成,然后费力地键入一个7位小数的数字。
我已经环顾四周,并且看到了很多涉及Regex,postfix,BNF等的内容。 就我的理解而言,其中很多看起来非常复杂,也太复杂,而且它们与AS3均无关。
但是,我曾想过通过将字符串转换为AS3可以理解的数学表达式,并使Flash使用try catch
处理错误的方法,从而使此问题变得更加简单。但我不知道该怎么做要么( Number("3+5")
结果为NaN
)。
我目前正在使用Event.CHANGE
将文本输入限制为仅数字,如下所示:
function Restrict(event:Event):void
{
if (event.currentTarget.text.indexOf(".") == -1)
{
event.currentTarget.restrict = "0-9.";
}
else
{
event.currentTarget.restrict = "0-9";
}
}
到目前为止,它似乎运行良好。
我打算以这种方式实施此新限制,但是如果有一种更加有效的方式来限制文本输入,请随时在响应中包括它。
只是为了清楚起见,我想问一问如何实现使某人能够将数学表达式输入到TextField
,并且程序会将该输入注册为表达式并进行计算。
谢谢阅读。
编辑:我做了一些更多的研究,我偶然发现了波兰波兰语符号计算器/解析器/实用程序类/库/东西,这看起来非常有用。 似乎有点类似于fsbmain提到的Executer
类,但是它看起来更易于使用并且更易于理解。
但是问题仍然存在,我必须找到一种有效的方法来将用户输入的语法限制为数学表达式,但是至少现在我至少有两种方法可以将字符串转换为数字进行计算。
实际上,这是一个非常棘手的问题,即使您提到的valid mathematical expressions
定义本身也非常复杂,即,表达式6-6-+-7
从as3
语法的角度来看是有效的,并给出结果7
。
关于问题的第二部分:
将字符串转换为AS3可以理解的数学表达式
由于像eval
的函数自as2
以来就消失了,因此仅使用本机as3意味着不可能,但是您可以尝试使用一些as3编写的语法转换器,即flash-console
项目中的Executer
:
var exec:Executer = new Executer();
var res:* = exec.exec(this, "6-7");
trace("exec = " + res); //output "-1"
尽管由于您的问题中出现了一些复杂的表达式而失败了:
var exec:Executer = new Executer();
var res:* = exec.exec(this, "6-6-+-7");
trace("exec = " + res); //output "- 7"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.