2009-08-06 11 views

Respuesta

0

Se puede notar que en ActionScript:

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

y

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

Así excepción de ceros, en realidad se puede ahora si una cadena es un número o no

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

¿Eso ayuda?

+2

no realmente, ya que se trataba de determinar si una cadena es numérico ... por cierto. esto está en desuso desde AS3, ya que proporciona el operador "es" (AS2 tenía "instanceof" para el caso), la propiedad "constructor" o "flash.utils.getQualifiedClassName" – back2dos

24

La forma más fácil de hacerlo es convertir realmente la cadena en un Número y probarla para ver si es NaN. Si observa la referencia de Flex API, la función Number() de nivel superior indica que devolverá NaN si la cadena que se pasa al método no se puede convertir a un Número.

Afortunadamente, Flex (tipo de) hace esto por usted, con la función isNaN(). Todo lo que necesita hacer es:

var testFlag:Boolean = isNaN(someStringThatMightBeANumber); 

Si testFlag es falso, la cadena se puede convertir en un número, de lo contrario no se puede convertir.

Editar

Lo anterior no funcionará si la compilación en modo estricto. En su lugar, tendrá que convertir primero en número y luego comprobar si hay NaN, de la siguiente manera:

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

mismo problema que con la respuesta de OneNerd ... no se compilará. .. – back2dos

+1

OK, luego solo convertimos a Número primero. Haré la edición apropiada. – Dan

+0

Experimenté con esto brevemente. Parece que puedes usar 'Number (someString) is Number' para realizar el control? – JeffryHouser

16

no he probado esto, pero esto debería funcionar:

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

Si está utilizando AS3 y/o el modo estricto (como ha señalado back2dos), tendrá que convertirse al primer número con el fin de que se compile:

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

el parámetro de isNaN tiene que ser un flotante ... por lo que arrojará errores de compilación en modo estricto ... – back2dos

+5

true para as3 strict mode Supongo, aunque eso no se especificó. Apenas se merece un voto negativo, quiero decir, votaste 3 mensajes aquí. ¿Qué hay de simplemente poner un comentario y dejarlo así? jeesh. – OneNerd

0

este tratará de convertir su String a un Number , Que en esencia es un número de 64 bits en coma flotante:

var val:Number = Number(sourceString); 

si sourceString no es un String representación válida de un Number, val será NaN (no un número) ... hay que comprobar en contra de ese valor con isNaN ... porque val == NaN devolverá falso por una razón que no puede entender ... puede usar int(val) == val para verificar, si es un valor integral ...

Greetz

back2dos

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

Aquí es otra manera de comprobar si el valor se puede convertir en un número:

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

este trazará siguiente:

2 true 
3 true 
string false 
3

RegE ruta XP:

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

¡OMG! ¡hay una función simple 'isNan' para eso! No pienses mucho! :) – Jalal

0

poner esto en cualquier función en la que desea únicos números que quedan
joy_edit1 es un objeto TextInput (chispa)

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

La mayoría de las respuestas sobre esta cuestión tienen un defecto importante en ellos. Si toma Número (nulo) o Número (indefinido) o Número (""), todos devolverán 0 y evaluarán como "es un número". Pruebe algo como esto en su lugar:

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

Debe comprobar StringUtil.trim (val) === "" para cubrir el caso de espacios en blanco. –

0

Se debe utilizar la solución nativa de Adobe:

parseInt y parseFloat métodos.

también leer la descripción isNaN:

Devuelve VERDADERO si el valor es NaN (no un número). La función isNaN() es útil para verificar si una expresión matemática evalúa con éxito en un número. El uso más común de isNaN() es verificar el valor devuelto por las funciones parseInt() y parseFloat(). El valor NaN es un miembro especial del tipo de datos Número que representa un valor que "no es un número".

Aquí es una aplicación sencilla:

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

Este método también devolverá true en caso de que la cadena contenga un número con caracteres aleatorios, ejemplo: 6s. – krizajb

Cuestiones relacionadas