请帮助我为货币/货币字段编写 JavaScript验证。
如果您有:)
,请提供任何正则表达式此外,对于我的地区,字段中不需要任何货币符号,如“$”。
只有小数才能包含在验证中作为特殊字符。以及数字。
答案 0 :(得分:36)
你可以使用正则表达式:
var regex = /^\d+(?:\.\d{0,2})$/;
var numStr = "123.20";
if (regex.test(numStr))
alert("Number is valid");
如果您不希望对小数位数一样严格,您可能会发现使用一元(+
)运算符更容易转换为数字以检查它的有效性:
var numStr = "123.20";
var numNum = +numStr; // gives 123.20
如果数字字符串无效,它将返回NaN
(非数字),您可以轻松测试:
var numStr = "ab123c";
var numNum = +numStr;
if (isNaN(numNum))
alert("numNum is not a number");
当然,它会允许用户添加更多的小数位,但是你可以使用number.toFixed(2)
来减去任何额外的小数位数到2位小数。 parseFloat
对输入的严格程度要小得多,并且只要该字符串以数字开头,就会从字符串中找到它能找到的第一个数字,例如。 parseFloat("123abc")
会产生123
。
答案 1 :(得分:27)
我根据接受的答案建立了答案。
var regex = /^[1-9]\d*(((,\d{3}){1})?(\.\d{0,2})?)$/;
^[1-9]
号码必须以1-9开头
\d*
该号码可以包含任意数量的任何数字
(...)$
从最后(...)$
开始查看下一组
(...)?(...)?
可选择查找两个组。第一个是逗号,第二个是小数
(,\d{3}){1}
查找一个逗号的出现,后跟正好三位数
\.\d{0,2}
查找小数后跟零,一位或两位数。
这个正则表达式遵循这些规则:
如果客户输入多个小数点或多个逗号,则该值无效且不会被接受。
无效输入值的示例
这里可以看到一个例子: http://jsfiddle.net/rat141312/Jpxu6/1/
<强>更新强>
通过将正则表达式中的[1-9]
更改为[0-9]
,也可以验证任何小于1
的数字。示例:0.42,007
答案 2 :(得分:1)
/[1-9]\d*(?:\.\d{0,2})?/
[1-9] - must start with 1 to 9
\d* - any number of other digits
(?: )? - non capturing optional group
\. - a decimal point
\d{0,2} - 0 to 2 digits
这对你有用吗? 或者parseFloat:
var float = parseFloat( input );
答案 3 :(得分:0)
对我来说,它在印度卢比的工作正常工作
var regex = /^[1-9]{0,2}(,{0,1})(\d{2},)*(\d{3})*(?:\.\d{0,2})$/;
var a = '1,111.11';
regex.test(a);
答案 4 :(得分:0)
let amount = document.querySelector('#amount'), preAmount = amount.value;
amount.addEventListener('input', function(){
if(isNaN(Number(amount.value))){
amount.value = preAmount;
return;
}
let numberAfterDecimal = amount.value.split(".")[1];
if(numberAfterDecimal && numberAfterDecimal.length > 3){
amount.value = Number(amount.value).toFixed(3);;
}
preAmount = amount.value;
})
<input type="text" id="amount">