繁体   English   中英

将文本字段限制为数学表达式-将字符串转换为数学表达式

[英]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-+-7as3语法的角度来看是有效的,并给出结果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM