检查给定值是否为正数或最多两位小数的浮点数
check if a given value is a positive number or float with maximum two decimal places
我正在尝试对输入文本控件实施验证检查,该控件应仅允许正整数值或最多保留 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)
我查看了 Whosebug 中的各种答案,但与我的期望不符。感谢任何帮助。
我想象会是:
var num = Number(val);
if (!isNaN(num)
&& num > 0
&& num == num.toFixed(2))
{
// Valid
}
您真正要寻找的是该值与模式匹配,而不是它的值是什么。为此,您最好使用正则表达式。具体来说,这应该捕获您要查找的值:
/^\d+(\.\d{1,2})?$/
也就是说:
- 从值的开头开始 (
^
)
- 匹配 1 个或多个数字 (
\d+
)
- 后跟选项小数点和一位或两位数字 (
(\.\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.
我正在尝试对输入文本控件实施验证检查,该控件应仅允许正整数值或最多保留 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)
我查看了 Whosebug 中的各种答案,但与我的期望不符。感谢任何帮助。
我想象会是:
var num = Number(val);
if (!isNaN(num)
&& num > 0
&& num == num.toFixed(2))
{
// Valid
}
您真正要寻找的是该值与模式匹配,而不是它的值是什么。为此,您最好使用正则表达式。具体来说,这应该捕获您要查找的值:
/^\d+(\.\d{1,2})?$/
也就是说:
- 从值的开头开始 (
^
) - 匹配 1 个或多个数字 (
\d+
) - 后跟选项小数点和一位或两位数字 (
(\.\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.