2

アクションスクリプトを使用していて、文字列に特殊文字や数字が含まれているかどうかを確認しようとしているだけです。リストに追加されていない場合は、エラー出力が表示されます...ただし、NANによってエラーが発生します。値の暗黙の強制文字列型から無関係な型番号への変換...何か提案はありますか?ここにいくつかのコードがあります:

private function onAddName(event:Event):void {
        var newItem:Object = {label:addName_ti.text};
        //if not a number true then add onto list.
        if ( isNaN(addName_ti.text )
        {
            names_li.dataProvider.addItem(newItem);
            names_li.dataProvider.sortOn("label");
            addName_ti.text = "";
            addName_bn.enabled = false;
            //User feedback for successfully entering item.
            trace ("Item succesfully added!");
        } else 
        { 
            //User feedback for not succesffully entering item.
            addName_bn.enabled = false;
            trace ("Improper formatting");
        }

    }
4

2 に答える 2

0

isNaNメソッドはNumberパラメーターを想定しているため、文字列をNumberにキャストする必要があります。

if(isNaN(Number(addName_ti.text))

正規表現(regex)を使用して、変数を検証することもできます。

var isNumeric:RegExp= /^[0-9]*$/;
trace(isNumeric.test(addName_ti.text));
于 2012-09-19T20:35:05.647 に答える
0

isNaNは数値を期待しています。そのため、エラーが発生します。最初にparseFloatを使用する必要があります。

isNaN(parseFloat(addName_ti.text));

parseFloatは、空白と末尾の文字を無視するため、特に外部テキストに適しています。解析が失敗した場合はNaNを返します。

" 12"を返し12ます。「12abc」はを返し12ます。「abc12」はを返しNaNます。 " 12 34 5 6"を返し12ます。

テキストが適切にフォーマットされていることが保証されている場合は、数値としてキャストするだけのNumber("12")方がわずかに高速です。私のテストでは、1000万回実行すると約400ミリ秒速くなりました。

于 2012-09-19T20:35:40.717 に答える