当前位置: 首页 > 知识库问答 >
问题:

验证字符串是否为正整数

能钟展
2023-03-14

我想要最简单的故障安全测试来检查JavaScript中的字符串是否为正整数。

isNaN(str)为所有类型的非整数值返回true,parseInt(str)为浮点字符串返回整数,如“2.5”。我也不想使用jQuery插件。

共有3个答案

沈皓君
2023-03-14

在节点和超过90%的浏览器(除了IE和Opera Mini)上工作的现代解决方案是使用Number.is整数,然后进行简单的正面检查。

Number.isInteger(x) && x > 0

这在ECMAScript 2015中最终确定。

function isPositiveInteger(x) {
    return Number.isInteger(x) && x > 0
}

Polyfil是:

Number.isInteger = Number.isInteger || function(value) {
  return typeof value === 'number' && 
    isFinite(value) && 
    Math.floor(value) === value;
};

如果您需要支持字符串或数字形式的输入,那么您可以使用我在所有现有答案(2/1/2018)在某种形式的输入上失败后编写的大型测试套件。

function isPositiveInteger(v) {
  var i;
  return v && (i = parseInt(v)) && i > 0 && (i === v || ''+i === v);
}
牛智志
2023-03-14

如果我们认为JavaScript整数是最大值<代码> 4294967295 (即<代码> Maul.PoW(2 32)-1 < /COD>),那么下面的简短解决方案将完美地工作:

function isPositiveInteger(n) {
    return n >>> 0 === parseFloat(n);
}

描述:

  • 零填充右移运算符做三件重要的事情:
    • 截断小数部分
      • 123.45
      • -1
      • 1e10

      测验:

      "0"                     : true
      "23"                    : true
      "-10"                   : false
      "10.30"                 : false
      "-40.1"                 : false
      "string"                : false
      "1234567890"            : true
      "129000098131766699.1"  : false
      "-1e7"                  : false
      "1e7"                   : true
      "1e10"                  : false
      "1edf"                  : false
      " "                     : false
      ""                      : false
      

      演示:http://jsfiddle.net/5UCy4/37/

      另一种方法适用于所有有效到Number的数值。最大值,即约为1.7976931348623157e 308

      function isPositiveInteger(n) {
          return 0 === n % (!isNaN(parseFloat(n)) && 0 <= ~~n);
      }
      

      描述:

      1. !isNaN(parseFloat(n))用于过滤纯字符串值,例如字符串
      2. 0

      测验:

      "0"                     : true
      "23"                    : true
      "-10"                   : false
      "10.30"                 : false
      "-40.1"                 : false
      "string"                : false
      "1234567890"            : true
      "129000098131766699.1"  : false
      "-1e10"                 : false
      "1e10"                  : true
      "1edf"                  : false
      " "                     : false
      ""                      : false
      

      演示:http://jsfiddle.net/5UCy4/14/

      以前的版本:

      function isPositiveInteger(n) {
          return n == "0" || ((n | 0) > 0 && n % 1 == 0);
      }
      

      演示:http://jsfiddle.net/5UCy4/2/

吕鹏
2023-03-14

给你两个答案:

>

  • 基于解析

    正则表达式

    请注意,在这两种情况下,我都将正整数解释为包括0,即使0不是正的。如果您想禁止0,我将包含注释。

    如果希望它是一个在合理值范围内的标准化十进制整数字符串,可以执行以下操作:

    function isInDesiredForm(str) {
        var n = Math.floor(Number(str));
        return n !== Infinity && String(n) === str && n >= 0;
    }
    

    或者,如果要允许空白和前导零:

    function isInDesiredForm(str) {
        str = str.trim();
        if (!str) {
            return false;
        }
        str = str.replace(/^0+/, "") || "0";
        var n = Math.floor(Number(str));
        return n !== Infinity && String(n) === str && n >= 0;
    }
    

    实时测试台(不处理前导零或空格):

    js lang-js prettyprint-override">function isInDesiredForm(str) {
        var n = Math.floor(Number(str));
        return n !== Infinity && String(n) === str && n >= 0;
    }
    function gid(id) {
        return document.getElementById(id);
    }
    function test(str, expect) {
        var result = isInDesiredForm(str);
        console.log(
            str + ": " +
            (result ? "Yes" : "No") +
            (expect === undefined ? "" : !!expect === !!result ? " <= OK" : " <= ERROR ***")
        );
    }
    gid("btn").addEventListener(
        "click",
        function() {
            test(gid("text").value);
        },
        false
    );
    test("1", true);
    test("1.23", false);
    test("1234567890123", true);
    test("1234567890123.1", false);
    test("0123", false); // false because we don't handle leading 0s
    test(" 123 ", false); // false because we don't handle whitespace
    <label>
      String:
      <input id="text" type="text" value="">
    <label>
    <input id="btn" type="button" value="Check">

  •  类似资料:
    • 问题内容: 我想要最简单的故障安全测试来检查JavaScript中的字符串是否为正整数。 对于各种非整数值返回true,并且为浮点字符串返回整数,例如“ 2.5”。而且我也不想使用某些jQuery插件。 问题答案: 为您提供两个答案: 基于解析 正则表达式 请注意,在两种情况下,我都将“正整数”解释为包括,即使它不是正数。如果您不愿意,我会提供注释。 基于解析 如果希望它是在合理值范围内的归一化十

    • 我的Java应用程序“A”正在从另一个Java应用程序获取移动电话号码作为字符串。因此,在应用程序A获得手机号码字符串后,我需要验证该手机号码字符串中是否只有数字。为了验证我使用了如下的简单逻辑, 我正在检查I=1,因为国家代码的第一个字符将是“”。这种方法是O(n)。还有另一种方法,我们可以使用。这将抛出<代码> No.MultFrimeExtry,以便我们可以捕获并考虑它是一个字母数字字符串。

    • 本文向大家介绍C#验证给定字符串是否为数字的方法,包括了C#验证给定字符串是否为数字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#验证给定字符串是否为数字的方法。分享给大家供大家参考。具体分析如下: 这段C#代码用于验证给定的字符串是否为数字,不能用于验证负数,字符串中只能出现数字和小数点,否则认为不是数字,不验证数字的长度,也就是说,给定的字符串再长,哪怕是1万个字符,也可以

    • 我的控制器中有请求,是MongoId的字符串版本。如果我使用无效的字符串格式(与MongoId格式不匹配)调用此请求,则该请求将一直执行,直到MongoDB调用抛出内部服务器错误。 我如何验证,例如或"ANWPINREBAFSOFASD"未被验证,并在我的请求中尽早停止 电流控制器endpoint: 该服务称为:

    • 问题内容: 我正在尝试确定字符串数组中的特定项目是否为整数。 我是形式上的中缀表达式,然后尝试将结果数组拆分为两个数组;一个用于整数,一个用于运算符,同时丢弃括号和其他杂项。做到这一点的最佳方法是什么? 我以为我也许可以找到一种方法或某种方法,但是没有运气。 问题答案: 最幼稚的方式是遍历String并确保所有元素对于给定的基数都是有效数字。由于你必须至少查看一次每个元素,因此这将尽可能地提高效率

    • 问题内容: 如何检查字符串是否是Java中的URL? 问题答案: 您可以尝试用它创建一个对象。如果该URL不正确,则会引发a。