在ActionScript中检查一个字符串转换为数字后是否真的是一个数字的最简单方法

15

不确定是否理解清楚,但我需要检查服务器返回的值是否实际上是一个数字。目前,我获取所有数字值都作为字符串返回,比如 '7' 而不是 7。

最简单的方法是如何检查字符串值是否可以转换为数字?

11个回答

24

最简单的方法是将字符串转换为数字,然后测试它是否为NaN。如果您查看Flex API参考文档,顶级Number()函数说明如果传递给该方法的字符串无法转换为数字,则会返回NaN。

幸运的是,Flex(有点)为你做到了这一点,使用isNaN()函数即可。你所需要做的就是:

var testFlag:Boolean = isNaN( someStringThatMightBeANumber );

如果testFlag为false,则该字符串可以转换为数字,否则不能转换。

编辑

如果在严格模式下编译,上述代码将无法正常工作。您需要先将其转换为数字,然后再检查是否为NaN,方法如下:

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

1
好的,那么我们先转换为数字。我会进行适当的编辑。 - Dan
我进行了简短的实验。看起来你可以使用“Number(someString)is Number”来执行检查? - JeffryHouser
请注意,isNaN("") == false,这可能是因为空字符串会被解释为零。 - Kyle Delaney

16

我没有测试过,但应该会起作用:

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

isNaN的参数必须是浮点数...所以在严格模式下会抛出编译器错误... - back2dos
5
我想你指的是AS3的严格模式,尽管没有具体说明。不过,这并不值得被评为负分,伙计——我的意思是,你在这里投了3个负分。不如只留下一个评论就好了。唉。 - OneNerd

4

这个问题的大部分答案都有一个主要缺陷。如果你使用 Number(null)、Number(undefined) 或者 Number(""),它们都会返回 0 并且被认为是 "数字"。相反,可以尝试使用以下代码:

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

你应该检查 StringUtil.trim(val) === "" 来覆盖空格的情况。 - Rahul Singhai

3

正则表达式路径:

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

1
哦,天啊!这里有一个简单的 isNan 函数可以解决这个问题!不要想太难了! :) - Jalal

1

这里有另一种检查值是否可以转换为数字的方法:

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
function isANumber(__str:String):Boolean
{
    return !isNaN(Number(__str));
}

0
你可以注意到在ActionScript中:
trace(int('7')); // will return 7

并且

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

所以除了零以外,你现在可以知道一个字符串是否是数字了


0

这将尝试将您的String转换为一个Number,它本质上是一个64位浮点数:

var val:Number = Number(sourceString);

如果 sourceString 不是一个有效的 Number 字符串表示,那么 val 将会是 NaN(不是数字)... 你需要使用 isNaN 来检查该值 ... 因为 val == NaN 会返回 false 而无法理解原因 ... 你可以使用 int(val) == val 来检查它是否为整数值...

问候

back2dos


0

在任何你想要只保留数字的函数中添加以下代码:
joy_edit1是一个TextInput对象(Spark)

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

0

您应该使用Adobe的本地解决方案:

parseIntparseFloat方法。

还要阅读isNaN的描述:

如果值为NaN(不是数字),则返回true。 isNaN()函数用于检查数学表达式是否成功评估为数字。 isNaN()最常见的用途是检查从parseInt()parseFloat()函数返回的值。 NaN值是Number数据类型的特殊成员,表示一个“不是数字”的值。

这里是一个简单的实现:

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

该方法还会在字符串包含随机字符的数字时返回true,例如:6s。 - krizajb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接