2012-09-19 108 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