2009-08-06 12 views

Odpowiedz

0

Można zauważyć, że w ActionScript:

trace(int('7')); // will return 7 

i

trace(int('a')); // will return 0 

Więc z wyjątkiem zera, można rzeczywiście teraz, gdy ciąg jest liczbą lub nie

-1
typeof('7') == 'string' 
typeof(7) == 'number' 

To pomaga?

+2

nie bardzo, ponieważ chodziło o ustalenie, czy ciąg jest numeryczne ... btw. jest to przestarzałe, ponieważ AS3, ponieważ zapewnia operator "is" (AS2 miał "instanceof" w tym przypadku), właściwość "constructor" lub "flash.utils.getQualifiedClassName" – back2dos

24

Najprostszym sposobem, aby to zrobić, jest przekonwertowanie łańcucha na liczbę i sprawdzenie, czy jest to NaN. Jeśli spojrzysz na referencję Flex API, funkcja Number() najwyższego poziomu mówi, że zwróci wartość NaN, jeśli łańcuch przekazany do metody nie może zostać przekonwertowany na liczbę.

Na szczęście Flex (rodzaj) robi to za ciebie z funkcją isNaN(). Wszystko, co musisz zrobić, to:

var testFlag:Boolean = isNaN(someStringThatMightBeANumber); 

Jeśli testFlag jest fałszywa, łańcuch może być przekształcony na numer, w przeciwnym razie nie mogą być konwertowane.

Edit

Powyższe nie będzie działać, jeśli kompilacji w trybie ścisłym. Zamiast tego, trzeba będzie najpierw przekonwertować na numer, a następnie sprawdzić, NaN, co następuje:

var testFlag:Boolean = isNaN(Number(someStringThatMightBeANumber)); 
+0

ten sam problem, co w odpowiedzi OneNerd ... nie skompiluje. .. – back2dos

+1

OK, to po prostu konwertujemy najpierw na Number. Zrobię odpowiednią edycję. – Dan

+0

Eksperymentowałem z tym krótko. Wygląda na to, że możesz użyć "Number (someString) is Number", aby wykonać test? – JeffryHouser

16

nie testowałem tego, ale to powinno działać:

if(isNaN(theString)) { 
    trace("it is a string"); 
} else { 
    trace("it is a number"); 
} 

Jeśli używasz AS3 i/lub tryb ścisły (jak podkreślił back2dos), trzeba przekonwertować na liczby pierwsze w celu użycia go do kompilacji:

if(isNaN(Number(theString))) { 
    trace("it is a string"); 
} else { 
    trace("it is a number"); 
} 
+0

parametr isNaN musi być float ... więc spowoduje to błędy kompilatora w trybie ścisłym ... – back2dos

+5

true dla trybu ścisłego as3 Przypuszczam, chociaż nie zostało to określone. Prawie nie zasługuje na negatywne głosowanie chociaż koleś - znaczy, przegłosowałeś 3 posty tutaj. Co powiesz na dodanie komentarza i pozostawienie go w tym. Jeesh. – OneNerd

0

ten będzie starał się przekształcić swój String do Number , Która w istocie jest 64 bitowa liczba zmiennoprzecinkowa:

var val:Number = Number(sourceString); 

jeśli sourceString nie jest poprawnym String reprezentacja Number, val będzie NaN (nie numer) ... trzeba sprawdzić przeciwko tej wartości z isNaN ... ponieważ val == NaN zwróci false z powodu, który nie może całkiem zrozumieć ... możesz użyć int(val) == val, aby sprawdzić, czy jest to wartość integralna ...

Greetz

back2dos

0
function isANumber(__str:String):Boolean 
{ 
    return !isNaN(Number(__str)); 
} 
1

Oto kolejny sposób, aby sprawdzić, czy wartość ta może zostać przekształcony w liczbie:

var ob:Object = {a:'2',b:3,c:'string'}; 

for(var v:* in ob){ 
var nr:Number = ob[v]; 
trace(ob[v]+" "+(nr === Number(nr))) 
} 

będzie prześledzić następujący:

2 true 
3 true 
string false 
3

RegE xp ścieżka:

function stringIsAValidNumber(s: String) : Boolean { 
    return Boolean(s.match(/^[0-9]+.?[0-9]+$/)); 
} 
+1

OMG! istnieje do tego prosta funkcja 'isNan'! Nie myśl mocno! :) – Jalal

0

Włóż to do dowolnej funkcji w którym chcesz tylko numery pozostać
joy_edit1 jest obiektem TextInput (iskra)

//is a number check 
if(isNaN(Number(joy_edit1.text))) { 
    joy_edit1.text = ""; 
    return void; 
} 
4

Większość odpowiedzi na to pytanie ma dużą wadę w im. Jeśli wybierzesz Number (null) lub Number (undefined) lub Number (""), all zwróci 0 i oceni na "is a number". Spróbuj coś takiego zamiast:

function isANumber(val:*):Boolean { 
    return !(val === null || val === "" || isNaN(val)); 
} 
+0

Powinieneś sprawdzić StringUtil.trim (val) === "", aby pokryć przypadek pustych miejsc. –

0

Należy używać rodzimych rozwiązanie Adobe:

parseInt i parseFloat metod.

przeczytać również opisu isNaN:

Zwraca true, jeśli wartość jest NaN (nie liczba). Funkcja isNaN() jest przydatna do sprawdzania, czy wyrażenie matematyczne z powodzeniem ocenia numer. Najczęstszym zastosowaniem isNaN() jest sprawdzanie wartości zwracanej z funkcji parseInt() i parseFloat(). Wartość NaN jest specjalnym elementem typu danych Number, który reprezentuje wartość "nie jest liczbą".

Oto prosta realizacja:

function isANumber(value:String):Boolean { 
    return !isNaN(parseFloat(value)); 
} 
+0

Ta metoda zwróci również wartość true w przypadku, gdy ciąg zawiera liczbę z losowymi znakami, na przykład: 6s. – krizajb

Powiązane problemy