【问题标题】:Simplest way to check if a string converted to a number is actually a number in actionscript检查转换为数字的字符串是否实际上是actionscript中的数字的最简单方法
【发布时间】:2010-11-17 10:39:16
【问题描述】:

不确定这是否有意义,但我需要检查返回的服务器值是否实际上是一个数字。现在我得到所有作为字符串返回的数值 即“7”而不是 7。

检查字符串值是否可以实际转换为数字的最简单方法是什么?

【问题讨论】:

    标签: apache-flex flash


    【解决方案1】:

    执行此操作的最简单方法是将字符串实际转换为数字并测试它是否为 NaN。如果您查看 Flex API 参考,顶级 Number() 函数表示,如果传递给该方法的字符串无法转换为数字,它将返回 NaN。

    幸运的是,Flex(在某种程度上)使用 isNaN() 函数为您完成了这项工作。您需要做的就是:

    var testFlag:Boolean = isNaN( someStringThatMightBeANumber );
    

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

    编辑

    如果在严格模式下编译,上述内容将不起作用。相反,您需要先转换为 Number,然后检查 NaN,如下所示:

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

    【讨论】:

    • 好的,那我们先转换成数字。我会进行适当的编辑。
    • 我对此做了简单的实验。看来你可以使用'Number(someString) is Number'来执行检查?
    • 请记住isNaN("") == false,可能是因为空字符串的计算结果为零。
    【解决方案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");
    }
    

    【讨论】:

    • isNaN 的参数必须是浮点数...所以这会在严格模式下引发编译器错误...
    • 我想对于 as3 严格模式是正确的,尽管没有指定。虽然伙计,但几乎不值得投反对票——我的意思是,你在这里投了 3 个帖子。只是发表评论并留下它怎么样。天哪。
    【解决方案3】:

    关于这个问题的大多数答案都存在重大缺陷。如果您采用 Number(null) 或 Number(undefined) 或 Number(""),所有将返回 0 并将评估为“是一个数字”。尝试这样的事情:

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

    【讨论】:

    • 您应该检查 StringUtil.trim(val) === "" 以涵盖空格的情况。
    【解决方案4】:

    正则表达式路径:

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

    【讨论】:

    • 天啊!有一个简单的isNan 函数!不要想太多! :)
    【解决方案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 不是Number 的有效String 表示,则val 将是NaN(不是数字)...您必须使用isNaN 检查该值...因为@ 987654329@会返回false,原因不太明白……你可以用int(val) == val来检查,是否是整数值……

        问候

        back2dos

        【讨论】:

          【解决方案8】:

          将其放入您只希望保留数字的任何函数中
          joy_edit1 是一个 TextInput 对象 (spark)

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

          【讨论】:

            【解决方案9】:
            function isANumber(__str:String):Boolean
            {
                return !isNaN(Number(__str));
            }
            

            【讨论】:

              【解决方案10】:

              你应该使用Adobe的原生解决方案:

              parseIntparseFloat 方法。

              另请阅读 isNaN 说明:

              如果值为 NaN(不是数字),则返回 true。 isNaN() 函数 对于检查数学表达式是否计算非常有用 成功到了一个号码。 isNaN() 最常见的用途是检查 parseInt() 和 parseFloat() 函数返回的值。这 NaN 值是 Number 数据类型的一个特殊成员,它表示 一个“不是数字”的值。

              这是一个简单的实现:

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

              【讨论】:

              • 如果字符串中包含带有随机字符的数字,该方法也会返回true,例如:6s。
              【解决方案11】:
              typeof('7') == 'string'
              typeof(7) == 'number'
              

              这有帮助吗?

              【讨论】:

              • 不是真的,因为它是关于确定一个字符串是否是数字的......顺便说一句。自 AS3 以来已弃用,因为它提供了“is”运算符(AS2 有“instanceof”)、属性“constructor”或“flash.utils.getQualifiedClassName”
              猜你喜欢
              • 2012-07-13
              • 1970-01-01
              • 2011-12-28
              • 2018-05-04
              • 2012-08-28
              • 2011-01-27
              • 2012-09-16
              • 2010-09-26
              相关资源
              最近更新 更多