【发布时间】:2010-11-17 10:39:16
【问题描述】:
不确定这是否有意义,但我需要检查返回的服务器值是否实际上是一个数字。现在我得到所有作为字符串返回的数值 即“7”而不是 7。
检查字符串值是否可以实际转换为数字的最简单方法是什么?
【问题讨论】:
标签: apache-flex flash
不确定这是否有意义,但我需要检查返回的服务器值是否实际上是一个数字。现在我得到所有作为字符串返回的数值 即“7”而不是 7。
检查字符串值是否可以实际转换为数字的最简单方法是什么?
【问题讨论】:
标签: apache-flex flash
执行此操作的最简单方法是将字符串实际转换为数字并测试它是否为 NaN。如果您查看 Flex API 参考,顶级 Number() 函数表示,如果传递给该方法的字符串无法转换为数字,它将返回 NaN。
幸运的是,Flex(在某种程度上)使用 isNaN() 函数为您完成了这项工作。您需要做的就是:
var testFlag:Boolean = isNaN( someStringThatMightBeANumber );
如果testFlag为false,则字符串可以转换为数字,否则不能转换。
编辑
如果在严格模式下编译,上述内容将不起作用。相反,您需要先转换为 Number,然后检查 NaN,如下所示:
var testFlag:Boolean = isNaN( Number( someStringThatMightBeANumber ) );
【讨论】:
isNaN("") == false,可能是因为空字符串的计算结果为零。
尚未对此进行测试,但这应该可以工作:
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");
}
【讨论】:
关于这个问题的大多数答案都存在重大缺陷。如果您采用 Number(null) 或 Number(undefined) 或 Number(""),所有将返回 0 并将评估为“是一个数字”。尝试这样的事情:
function isANumber( val:* ):Boolean {
return !(val === null || val === "" || isNaN(val));
}
【讨论】:
正则表达式路径:
function stringIsAValidNumber(s: String) : Boolean {
return Boolean(s.match(/^[0-9]+.?[0-9]+$/));
}
【讨论】:
isNan 函数!不要想太多! :)
这是另一种检查值是否可以转换为数字的方法:
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
【讨论】:
您可以在 actionscript 中注意到:
trace(int('7')); // will return 7
和
trace(int('a')); // will return 0
所以除了零之外,你现在实际上可以判断一个字符串是否为数字
【讨论】:
这将尝试将您的 String 转换为 Number,它本质上是一个 64 位浮点数:
var val:Number = Number(sourceString);
如果sourceString 不是Number 的有效String 表示,则val 将是NaN(不是数字)...您必须使用isNaN 检查该值...因为@ 987654329@会返回false,原因不太明白……你可以用int(val) == val来检查,是否是整数值……
问候
back2dos
【讨论】:
将其放入您只希望保留数字的任何函数中
joy_edit1 是一个 TextInput 对象 (spark)
//is a number check
if( isNaN(Number(joy_edit1.text)) ) {
joy_edit1.text = "";
return void;
}
【讨论】:
function isANumber(__str:String):Boolean
{
return !isNaN(Number(__str));
}
【讨论】:
你应该使用Adobe的原生解决方案:
parseInt 和 parseFloat 方法。
另请阅读 isNaN 说明:
如果值为 NaN(不是数字),则返回 true。 isNaN() 函数 对于检查数学表达式是否计算非常有用 成功到了一个号码。 isNaN() 最常见的用途是检查 parseInt() 和 parseFloat() 函数返回的值。这 NaN 值是 Number 数据类型的一个特殊成员,它表示 一个“不是数字”的值。
这是一个简单的实现:
function isANumber(value:String):Boolean {
return !isNaN(parseFloat(value));
}
【讨论】:
typeof('7') == 'string'
typeof(7) == 'number'
这有帮助吗?
【讨论】: