文字列に数値だけが含まれているかどうかを調べる方法はありますか。

質問:

編集用のテキスト UI 要素のテキストに、数値と文字のどちらが含まれるかを調べたいと考えています。

数値が含まれる場合は、その数値を返し、文字が含まれる場合は、「数値以外は入力できません。やり直してください」というメッセージを表示するようにしたいのですが、

どのようにすればよいでしょうか。

回答:

スクリプト:

    rollout MicroListener "MicroListener"
    (
    edittext myEditText text:""
    label theLabel "Ready."
    on myEditText changed txt do
    (
     if txt != "" then
     (
      try
      (
       val = execute txt
       theLabel.text = "You typed in "+ (val as string )
      )
      catch
       theLabel.text = "Invalid Expression!"
     )
     else
      theLabel.text = "Ready."
    )
    on myEditText entered txt do myEditText.text = ""
    )
    createDialog MicroListener 300 60

次の簡単なスクリプトは、ある種の「マイクロリスナー」を実装します。このマイクロリスナーは、Execute メソッドを使用して、edittext フィールドに入力された文字列を、MAXScript 式に変換します。数値だけではなく、Pi などの定数やユーザの定義したグローバル変数も入力できます。さらに、スクリプト内でグローバル変数を定義でき、即座にオブジェクトを作成することも可能です。

次にいくつかの例を示します。

125.1 は有効な式です。 これは定数で、そのまま評価します (125.1)。

一方、d は定義されていないため、undefined が返されます。

意外かもしれませんが、e は undefined を返しません。 MAXScript では予約語になっています。

pi の場合も同様です。 予想どおり、3.14149... が返されます。

2 つの未定義値を追加しようとしたので、「無効な式」と返されます。

この変数も定義されていません。

ここで定義されました。値が 10 になりました。

この結果、定数と変数とを含んだ式を記述することもできます。

関数名を入力すると(この場合、ボックスのコンストラクタ)、その関数が返されます。

関数を呼び出すことにより、「実際の」リスナーで行っているかのように、オブジェクトを作成できます。

このボックスは、指定した位置に従って、100 単位右に作成されます。

以上が例になります。