【问题标题】:Only allow whole numbers in input field [duplicate]只允许输入字段中的整数[重复]
【发布时间】:2015-03-16 02:02:20
【问题描述】:
function isNumber(n) {
    var j = n.trim();
  return (j % 1 === 0 && j != "");
}

如果输入的值为“14.0”,我的函数仍会返回 true。它应该只允许没有任何小数的整数。

【问题讨论】:

  • 如果在 ES6 环境下,使用Number.isInteger。如果 IE>=10,则在输入元素上使用pattern="\d+" 属性。

标签: javascript decimal


【解决方案1】:

您可以为此使用正则表达式

function isWhole(n) {
  return /^\d+$/.test(n);
}

$("#number").change(function() {
  if (isWhole($(this).val())) {
    $(".error").hide();
  } else {
    $(".error").show();
  }
});
.error {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="number" name="number" />
<p class="error">Whole numbers only</p>

【讨论】:

  • 这不适用于 OP 的要求。 var moon = 1234.0 返回真。
  • 嗯.. 正则表达式只匹配数字,不匹配其他字符,包括 .但我想这仅适用于字符串。
  • 唯一的,窃取内存的谷歌浏览器。问题是var moon = 1234.0; var str = moon.toString()之后,str等于"1234"
  • 我猜如果 1234.0 是“数字”类型,它会被视为 1234。但是由于 OP 在变量 n 上调用 trim,我想我们可以假设它是一个字符串。
  • @RobG 还有 Rob,我不认为使用 jQuery 来演示功能是错误的。它很简洁,最好展示代码的工作方式,因为他们可以直接从这里复制代码并知道它可以根据需要工作。我不同意这个不合理地针对任何包含 jQuery 的东西的反 jQuery 旅。
【解决方案2】:

尝试将其视为一个字符串,并使用正则表达式的匹配函数来查看那里是否有小数。您可以使用yourVariable.match (/[0-9]*(\.)[0-9]*/)。如果那里有小数,它将返回 true。

【讨论】:

  • OP 正在寻找字符串整数,所以 /^\d+$/.test(value) 完成了这项工作。
【解决方案3】:

滥用 round() 函数。这将摆脱垃圾:

function isNumber(n) {
  if(Math.round(n)==n && n.length==(Math.round(n)).length) 
    return n;
  else return false;
}

本质上,如果数字不是整数,则此函数返回 false,如果是整数,则返回确切的整数。

输入 14.0 应该返回 false

输入 13.5 应该返回 false

输入 13 应该返回 13。

【讨论】:

  • 为什么要返回四舍五入的数字?为什么不只是return Math.round(n) == n
  • 假设您的输入是 14.0。然后 Math.round(n)==n 为真。当您返回 n 时,您仍然拥有 14.0.0。如果您返回 Math.round(n),您将得到 14(所需的结果)。
  • 但是如果输入是 14.0,OP 希望它返回 false。
  • 啊,对不起,误读了。请参阅上面的编辑(在一分钟内)
  • 仍然失败:/。我真的,老实说,虽然这可能有效。
猜你喜欢
  • 2015-02-26
  • 2014-09-14
  • 2018-03-06
  • 1970-01-01
  • 2021-01-15
  • 2011-11-09
  • 2021-11-18
  • 2015-08-09
  • 1970-01-01
相关资源
最近更新 更多