2

嘿,我正在使用动作脚本,只是简单地尝试检查一个字符串是否包含特殊字符或数字,如果它没有将它添加到我的列表中,否则错误输出......但是 NAN 给了我一个错误隐式强制值String 类型到不相关的 Number 类型...有什么建议吗?这是一些代码:

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 参数,因此您必须将 String 转换为 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 回答