2016-03-27 13 views
0

TextFieldの入力を数式のみを含むように制限するにはどうすればよいですか?テキストフィールドを数式に限定する - 文字列を数式に変換する

承認入力が次のようになります

"3 + 5"

"-5 + 6"

"3/2(6 * 4)"

「6-- 5"

"+ 5-3"

など。

不合格入力は次のようになります

"5 +++ 3"

"6(7)"

"6-6 - + - 7"

など。

基本的には、私がそれを制限したい構文は、プログラミング言語が通常、日常の電卓から期待される構文入力のような数式を評価するために通常使用する構文の種類です。

私は、計算機を使ってそれを行うのではなく、数字や計算をテキストボックスに入力できるようにするプログラムを作っています。小数位。

私はちょっと見てきましたが、Regex、postfix、BNFなどを含む多くのものを見てきました。それの多くは非常に複雑で、複雑すぎてわかりやすく、AS3とは関係がありませんでした。

しかし、文字列をAS3が理解できる数式に変換し、try catchを使ってFlashにエラーを処理させるだけで、この問題を大幅に単純化することについて考えましたが、それを行うには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に入力できるようにする機能を実装する方法を尋ねており、プログラムはその入力を式として登録して計算します。

読んでいただきありがとうございます。

EDIT:もう少し研究を重ねてきましたが、私はReverse Polish Notation calculator/parser/utility class/library/thingyを見つけました。fsbmainが指摘しているExecuterクラスと似ているようですが、使用するのがずっと簡単で、わかりやすいようです。

しかし、ユーザー入力の構文を数式に限定する効率的な方法を見つけなければならないという問題は依然として残っていますが、少なくとも今は文字列を計算のための数値に変換する少なくとも2つの方法があります。

答えて

1

かなり難しい質問実際に、あなたが言及したvalid mathematical expressionsのためにも定義は非常に自分自身を複雑になる、すなわち表現6-6-+-7は、ビューのas3構文の観点から有効であり、結果7を与えるのです。あなたの質問の後半部分に関しては

eval様な機能なので、ネイティブAS3で行うことはできませんAS3は

を理解することができることを数学的な表現に文字列を変換

は意味as2時以来行っていますが、as3で書かれた構文トランスレータ、つまりExecuterflash-consoleプロジェクト

から使用しようとすることができます

それはあなたの質問からいくつかの複雑な式で失敗しましだが:

 var exec:Executer = new Executer(); 
     var res:* = exec.exec(this, "6-6-+-7"); 
     trace("exec = " + res); //output "- 7" 
+0

これは興味深いソリューションと思われます。確かめます。 しかし、私は1つのクエリを持っています。 '' 6-6 - + - 7 "の評価が正しいかどうかはわかりません。私には、それは6-6 = 0のように7でなければならないように見えるし、正の負の数を減算しようとすると正のマイナスであるので、私の目で7になるはずですBIDMASが緩んでいる) – NotAPro

+0

私にとっては ' - + - 7'も' 7'になるはずです(同じ結果がas3 'asc2'コンパイラを与えますが、flash-console' Executor'は '-7' – fsbmain

関連する問題