Самый простой способ проверить, была ли строка, преобразованная в число, фактически числом в 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'
Помогает ли это?