检查给定的值是正数还是小数最多两位的浮点数

check if a given value is a positive number or float with maximum two decimal places

本文关键字:浮点数 两位 检查 小数      更新时间:2023-09-26

我正在尝试实现输入文本控件的验证检查,该控件应该只允许正整数值或具有最大2位小数的浮点数。

下面是我尝试过的方法:https://jsfiddle.net/99x50s2s/49/

HTML

Enter Price: <input type="text" id="price"/> (Example: 10, 10.50. Do not include $ symbol.)
<br/>
<br/>
<button type="button" id="check1">Check Method 1</button> (Fails when the value is 1.00)
<br/>
<br/>
<button type="button" id="check2">Check Method 2</button> (Passes when the value is 45f)
<br/>
<br/>
<button type="button" id="check3">Check Method 3</button> (Passes when the value is -10)
代码:

var price = $('#price');
$('#check1').on('click', function(){
   var val = $.trim(price.val());
    var num = Number(val);
    if (String(num) === val && num >= 0)
    {
        alert('Valid');
    }
    else
    {
        alert('Invalid');
    }
});
$('#check2').on('click', function(){
   var val = $.trim(price.val()); 
   var num = Number(val);
    if (((typeof num === 'number') && (num % 1 === 0)) || parseFloat(val))
    {
        alert('Valid');
    }
    else
    {
        alert('Invalid');
    }
});
$('#check3').on('click', function(){
   var val = $.trim(price.val());  
    if ($.isNumeric(val))
    {
        alert('Valid');
    }
    else
    {
        alert('Invalid');
    }
});
期望:

应该传递的值是正数和浮点数,最多有2个小数。(例10,10.50)

我看了各种答案在stackoverflow,但不符合我的期望。

您真正寻找的是值与模式匹配,而不是它的值是什么。为此,您最好使用正则表达式。具体来说,这应该捕获您正在寻找的值:

/^'d+('.'d{1,2})?$/

说:

  • 开始时的值(^)
  • 匹配1个或多个数字('d+)
  • 后接选项小数点和1或两位数字(('.'d{1,2})?)
  • 和值($)
  • 结束前没有其他字符

这将强制执行所有规则,允许您执行单个有效性检查,而不是多个有效性检查。


编辑:下面是如何使用它的一个例子:

function checkNumber(sNum) {
    var pattern = /^'d+('.'d{1,2})?$/;
    console.log(sNum + " is " + ((pattern.test(sNum)) ? "" : "not ") + "valid.");
}
checkNumber("1");      // 1 is valid.
checkNumber("-1");     // -1 is not valid.
checkNumber("1234");   // 1234 is valid.
checkNumber("1.");     // 1. is not valid.
checkNumber("1.0");    // 1.0 is valid.
checkNumber("1.12");   // 1.12 is valid.
checkNumber("1.123");  // 1.123 is not valid.

我想应该是:

var num = Number(val);
if (!isNaN(num)
    && num > 0
    && num == num.toFixed(2))
{
  // Valid
}