【问题标题】:checking if value of a textfield is integer in javascript在javascript中检查文本字段的值是否为整数
【发布时间】:2010-12-28 06:38:11
【问题描述】:

如何检查文本框中输入的文本是否为整数?我使用了 NAN 函数,但它也接受十进制值。

我该怎么做?有没有内置方法?

【问题讨论】:

  • 只是注意到 Number.isInteger 是在 ECMA-262 ed 6 aka ECMAScript 2015 中添加的。

标签: javascript validation


【解决方案1】:

假设文本字段被变量intfield引用,那么你可以这样检查:

var value = Number(intfield.value);
if (Math.floor(value) == value) {
  // value is an integer, do something based on that
} else {
  // value is not an integer, show some validation error
}

【讨论】:

  • 这会将空字符串或仅包含空格的字符串视为有效整数。如果 intfield.value 为 ""(空字符串),则 Number("") 返回 0,Math.floor(value) == value 返回 true。如果 value 保留为空字符串,它也会返回 true。
【解决方案2】:

正则表达式是一种方式:

var re = /^-?\d\d*$/
alert(re.test(strNumber)); // leading or trailing spaces are also invalid here

带有更新的完整示例:

http://rgagnon.com/jsdetails/js-0063.html

function validateInteger( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid integer number.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
**************************************************/
  var objRegExp  = /(^-?\d\d*$)/;  

  //check for integer characters
  return objRegExp.test(strValue);
}

已更新以处理空格 - 这可能在验证中是不允许的,但无论如何都是这样: 可以继续使用我提供的链接中的代码(leftTrim/rightTrim),但在这里我重用了来自.trim() in JavaScript not working in IE的修剪

function ignoreLeadingAndtrailingWhitespace( strValue ) {
  return strValue.length>0?validateInteger( strValue.trim() ):false;
}

if(typeof String.prototype.trim !== 'function') { 
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, ''); 
  }
}


function validateInteger( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid integer number.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
**************************************************/
  var objRegExp  = /(^-?\d\d*$)/;

  //check for integer characters
  return objRegExp.test(strValue);
}

【讨论】:

  • 你有一个不必要的捕获组,这并不重要,因为你只是使用test,但仍然很奇怪。另外,它不考虑开头或结尾的空格。
  • 告诉 Gagnon ;) 我只是这里的信使,但要注意 - 更新它的方式
  • 已更新,但是在仅对整数进行验证时,前导空格和尾随空格可能会被视为无效
【解决方案3】:
// validate if the input is numeric and between min and max digits
function validateNumberSize(inputtxt, min, max)
{
    var numbers = /^[0-9]+$/;
    if(inputtxt.match(numbers))
    {
        if(inputtxt.length >= min && inputtxt.length <= max)
        {
            return true;
        }
    }
    return false;
}

【讨论】:

    【解决方案4】:
    var num = document.getElementById("myField").value;
    if(/^\d+$/.test(num)) {
        // is an int
    }
    

    【讨论】:

    • 您无法将正则表达式与数字匹配。
    • 刚刚摆脱了 parseInt,意识到这是错误的。谢谢布赖恩。
    • 未处理的负整数
    • @mplungjan - 这也是真的。
    【解决方案5】:

    表单数据始终是文本。我的建议是您将其解析为整数并将其与原始数据进行比较:

    var sampleData = ["not a number", "0", "10", "3.14", "-12", "-0.34", "2e10", "34foo", "foo34"];
    var integers = [], notIntegers = [];
    for(var i=0, len=sampleData.length; i<len; i++){
        var original = sampleData[i];
        var parsed = parseInt(original, 10);
        if( !isNaN(parsed) && original==parsed ){
            integers.push(parsed);
        }else{
            notIntegers.push(original);
        }
    }
    alert("Integers: " + integers.join(", ") + "\nNot integers: " + notIntegers.join(", "));
    

    这表明:

    Integers: 0, 10, -12
    Not integers: not a number, 3.14, -0.34, 2e10, 34foo, foo34
    

    不支持科学记数法,也不支持千位​​分隔符。如果这是一个问题,你需要一些不同的东西;)

    更新:我想明确指出,这只是可能的方法之一,而不是唯一的真理。如果您需要对数据进行数学运算,那么这种方法是有意义的,因此无论如何您都必须获得一个数值变量。

    【讨论】:

    • 与 /^-?\d\d*$/ 相比,我称之为矫枉过正,你的功能在哪里?
    • 当然,与一行相比,两行是多余的,因为它正好是代码的两倍。真丢人。 (你真的需要帮助将它封装成一个函数吗?)
    【解决方案6】:

    如果您正在寻找整数或小数,您可以选择:

    function IsNumeric(input)
    {
       return (input - 0) == input && input.length > 0;
    }
    

    【讨论】:

    • 它返回 true,因为字符串包含空格。您应该在调用长度之前修剪输入:... &amp;&amp; input.trim().length &gt; 0
    【解决方案7】:

    最好使用正则表达式如下:

    function isInteger(str) {
        var r = /^-?[0-9]*[1-9][0-9]*$/;
        return r.test(str);
    }
    

    只是一个测试演示:

    > function isInteger(str) {
    ...     var r = /^-?[0-9]*[1-9][0-9]*$/;
    ...     return r.test(str);
    ... }
    > isInteger("-123")
    true
    > isInteger("a123")
    false
    > isInteger("123.4")
    false
    

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2011-04-08
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多