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つのクエリを持っています。 '' 6-6 - + - 7 "の評価が正しいかどうかはわかりません。私には、それは6-6 = 0のように7でなければならないように見えるし、正の負の数を減算しようとすると正のマイナスであるので、私の目で7になるはずですBIDMASが緩んでいる) – NotAPro
私にとっては ' - + - 7'も' 7'になるはずです(同じ結果がas3 'asc2'コンパイラを与えますが、flash-console' Executor'は '-7' – fsbmain