2012-09-19 109 views
2

嘿,我正在使用动作脚本,只是简单地试图检查一个字符串是否包含特殊字符或数字,如果它不会将其添加到我的列表,但错误输出......但是南给我错误将类型为String的值隐式强制为不相关的类型Number ...任何建议?这里是一些代码:字符串验证ActionScript

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"); 
     } 

    } 
+0

我不知道它的复制/粘贴错字,但你与isNaN的条件是失踪>>)<<这应该导致编译错误。 –

回答

0

isNaN需要一个数字。这就是你得到错误的原因。你应该首先使用parseFloat:

isNaN(parseFloat(addName_ti.text)); 

parseFloat特别适合外部文本,因为它会忽略空格和尾随字符。如果解析不成功,它将返回NaN。

" 12"将返回12。 “12abc”将返回12。 “abc12”将返回NaN" 12 34 5 6"将返回12

如果您的文字保证格式良好,则简单地将其编号为Number("12")会稍快。在我的测试中,做1000万次大约要快400ms。

+0

谢谢你,工作就像一个魅力! – YoungGuy

0

的isNaN方法需要一个Number参数,所以你必须将字符串转换为数目:

if(isNaN(Number(addName_ti.text)) 

您还可以使用正则表达式(正则表达式)来验证您的变量:

var isNumeric:RegExp= /^[0-9]*$/; 
trace(isNumeric.test(addName_ti.text)); 
+0

这也可以很好地工作(只要你是文本格式良好的数字)。这可能会稍微快一点,因为它不检查空白和尾随字符。 – BadFeelingAboutThis