Самый простой способ проверить, была ли строка, преобразованная в число, фактически числом в actionscript

Не уверен, что это имеет смысл, но мне нужно проверить, действительно ли возвращаемое значение сервера является числом. Прямо сейчас я получаю ВСЕ числовые значения, возвращаемые как строки т.е. "7" вместо 7.

Какой самый простой способ проверить, действительно ли строковые значения могут быть преобразованы в числа?

Ответы

Ответ 1

Самый простой способ сделать это - фактически преобразовать строку в число и проверить, является ли это NaN. Если вы посмотрите на ссылку Flex API, функция Number() верхнего уровня сообщит, что она вернет NaN, если строка, переданная методу, не может быть преобразована в число.

К счастью, Flex (сорт) делает это для вас с помощью функции isNaN(). Все, что вам нужно сделать, это:

var testFlag:Boolean = isNaN( someStringThatMightBeANumber );

Если testFlag является ложным, строка может быть преобразована в число, иначе она не может быть преобразована.

Edit

Вышеуказанное не будет работать при компиляции в строгом режиме. Вместо этого вам нужно будет сначала преобразовать в Number, а затем проверить для NaN следующим образом:

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

Ответ 2

Не тестировали это, но это должно работать:

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

Если вы используете AS3 и/или строгий режим (как указано в back2dos), вам нужно будет сначала преобразовать в номер, чтобы он скомпилировался:

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

Ответ 3

Путь RegExp:

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

Ответ 4

Большинство ответов на этот вопрос имеют большой недостаток в них. Если вы возьмете Number (null) или Number (undefined) или Number ( "), все вернет 0 и будет оценивать значение" является числом". Попробуйте что-то вроде этого:

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

Ответ 5

Вот еще один способ проверить, может ли значение быть преобразовано в число:

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

это будет отслеживать следующее:

2 true
3 true
string false

Ответ 6

Вы можете заметить, что в actionscript:

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

и

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

Итак, за исключением нулей, вы можете на самом деле теперь, если строка является числом или нет

Ответ 7

это попытается преобразовать ваш String в Number, который по существу является 64-битным числом с плавающей запятой:

var val:Number = Number(sourceString);

Если sourceString не является допустимым String представлением Number, val будет NaN (а не числом)... у вас есть проверка на это значение с помощью isNaN... потому что val == NaN вернет false по причине, которая не может понять... вы можете использовать int(val) == val для проверки, является ли это интегральным значением...

Greetz

back2dos

Ответ 8

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

Ответ 9

Поместите это в любую функцию, где вы хотите, чтобы остались только числа.
joy_edit1 - объект TextInput (искра)

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

Ответ 10

Вы должны использовать собственное решение Adobe:

parseInt и методы parseFloat.

Также прочитайте описание isNaN:

Возвращает true, если значение NaN (не число). Функция isNaN() полезно для проверки того, оценивает ли математическое выражение успешно к числу. Наиболее распространенным использованием isNaN() является проверка значение, возвращаемое функциями parseInt() и parseFloat(). Значение NaN является специальным членом типа данных Number, который представляет значение, которое не является числом.

Вот простая реализация:

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

Ответ 11

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

Помогает ли это?