【问题标题】:How can I correctly check if a value is a number using JQuery?如何使用 JQuery 正确检查值是否为数字?
【发布时间】:2015-12-17 11:04:50
【问题描述】:

进入一个 JQuery 脚本我做这样的事情来检查插入到具有 id="variazioneAnticipo 的输入字段中的值是否是一个数字:

var variazioneAnticipo = $("#variazioneAnticipo").val();

if($.isNumeric(variazioneAnticipo)) {
    alert("NUMBER");
}
else {
     alert("NOT A NUMBER");
}

这很好用,但唯一的问题是 isNumeric() JQuery 函数也考虑数字 指数表示法 和其他我不想考虑的表示法号码。

这里怎么看:https://api.jquery.com/jQuery.isNumeric/这些符号被认为是数字:

$.isNumeric( 0xFF );      // true
$.isNumeric( "0xFF" );    // true
$.isNumeric( "8e5" );     // true (exponential notation string)

如何防止这些符号被视为数字?我可以通过 isNumeric() 函数以某种方式指定对我来说什么是数字,什么不可以?

或者如果一个值是一个数字而不考虑前面的情况,我该怎么办?

【问题讨论】:

  • 使用正则表达式/^[0-9]+$/.test(value)
  • @Tushar 我猜也需要处理浮点数
  • 如果要考虑浮点数,请使用/^[0-9]+(?:\.[0-9]+)?$/
  • @Tushar 好的...如果您添加响应并告诉我如何在我的代码中使用检查浮点数的正则表达式,我会接受它

标签: javascript jquery html jquery-plugins


【解决方案1】:
  1. input 上使用pattern 属性
  2. 在输入上绑定 keyup 事件
  3. 输入值后,检查值是否满足浮点正则表达式

$('#num').on('keyup', function() {
  var value = $(this).val();

  if (/^[0-9]+(\.[0-9]+)?$/.test(value)) {
    $('#message').text('Valid');
  } else {
    $('#message').text('Invalid');
  }
});
#num:invalid {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" pattern="[0-9]+(\.[0-9]+)?" id="num" />
<div id="message"></div>

Regex Explanation:

/^[0-9]+(\.[0-9]+)?$/
  1. ^:行首
  2. [0-9]+:匹配一个或多个从 0 到 9 的数字
  3. (\.[0-9]+)?:匹配出现的一个或多个数字,后跟一个小数点。整个组可以出现零次或一次。
  4. $: 行尾

只有 HTML 和 CSS 的相同代码

#valid,
#invalid {
  display: none;
}
#num:invalid,
#invalid {
  color: red;
}
#num:valid,
#valid {
  color: green;
}
#num:invalid ~ #invalid {
  display: block;
}
#num:valid + #valid {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" pattern="[0-9]+(\.[0-9]+)?" id="num" />
<div id="valid">Valid</div>
<div id="invalid">Invalid</div>

【讨论】:

  • 现在可以工作了,大声笑。当什么都没有的时候你能把无效的去掉吗?简单修复! :P
  • @tushar 你为什么要使用脚本,如果它适用于你发布的输入字段和 css ......?
  • @DiveshOswal 并非所有浏览器都支持 HTML5 的 pattern 属性。
  • @DiveshOswal 在答案底部也添加了不带 jQuery 的代码
【解决方案2】:

扩展Tushar'scomment,用一个检查的小提琴来回答:

$(function () {
  $("#out").click(function () {
    alert(/^[0-9]+(?:\.[0-9]+)?$/.test($("#in").val()) ? "Yes" : "No");
  });
});
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<input type="text" id="in" />
<input type="submit" value="Check" id="out" />

非常适合数字、浮点值,而不是十六进制或指数。

【讨论】:

  • 感谢署名
  • @Tushar 这就是所谓的正派。体面的刻痕代码! :P
猜你喜欢
  • 2013-01-06
  • 1970-01-01
  • 2012-06-27
  • 2019-03-20
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多