Самый простой способ проверить, является ли строка, преобразованная в число, на самом деле числом в ActionScript - PullRequest
14 голосов
/ 06 августа 2009

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

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

Ответы [ 11 ]

24 голосов
/ 06 августа 2009

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

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

var testFlag:Boolean = isNaN( someStringThatMightBeANumber );

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

Редактировать

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

var testFlag:Boolean = isNaN( Number( someStringThatMightBeANumber ) );
16 голосов
/ 06 августа 2009

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

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");
}
4 голосов
/ 04 декабря 2013

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

function isANumber( val:* ):Boolean {
    return !(val === null || val === "" || isNaN(val));
}
3 голосов
/ 24 декабря 2010

Путь RegExp:

function stringIsAValidNumber(s: String) : Boolean {
    return Boolean(s.match(/^[0-9]+.?[0-9]+$/));
}
1 голос
/ 15 декабря 2010

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

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
0 голосов
/ 04 апреля 2014

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

parseInt и parseFloat методы.

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

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

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

function isANumber(value:String):Boolean {
    return !isNaN(parseFloat(value));
}
0 голосов
/ 28 октября 2011

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

//is a number check
if( isNaN(Number(joy_edit1.text)) ) {
  joy_edit1.text = "";
  return void;
}
0 голосов
/ 11 августа 2009
function isANumber(__str:String):Boolean
{
    return !isNaN(Number(__str));
}
0 голосов
/ 06 августа 2009

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

var val:Number = Number(sourceString);

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

Greetz

back2dos

0 голосов
/ 06 августа 2009
typeof('7') == 'string'
typeof(7) == 'number'

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...