【问题标题】:Determine if conversion from string to 32-bit integer will overflow确定从字符串到 32 位整数的转换是否会溢出
【发布时间】:2010-02-17 16:33:39
【问题描述】:

尝试对 HTML 输入进行前端验证,而不是在 Java 后端抛出异常。

【问题讨论】:

    标签: javascript integer-overflow


    【解决方案1】:

    检查号码是否大于2147483647。

    例如:

    if (parseInt(num, 10) > 2147483647)
        //BAD!!!
    

    【讨论】:

    • 好 -- 值得一提的是,您必须在 Java 后端和前端进行输入验证。
    • @SLaks:也许您还需要检查下限 (-2147483648)。
    • 它已签名,因此上述所有内容均适用。为什么我没有想到这一点?
    【解决方案2】:
    if ((the_number >> 0) != the_number) {
      // overflow...
    }
    

    您仍然需要服务器端检查,因为客户端可能会关闭 Javascript 等。

    【讨论】:

    • @KennyTM - 如果有人只使用过 JavaScript 和 Java,他们可能不熟悉位移等较低级别的操作 - 你能详细解释一下你在做什么吗? OP 不知道 32 位溢出是什么样子的,所以解释一下可能会有所帮助。
    • 我熟悉 32 位溢出。 javascript 是否明确使用 32 位整数,或者这是否可以实现?
    • @user: 11.7.2 有符号右移运算符:“结果是一个有符号的 32 位整数。” (参考:ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf)
    【解决方案3】:

    检查一下:

    if (parseInt(myNumberAsString, 10) > 2147483647) {  alert("Invalid int!"); }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2013-12-22
      • 2012-01-15
      相关资源
      最近更新 更多