我有一个小表格,用户以美元金额输入存款。这个数量可以是正数或负数。我每次按下一个键时都试图验证表格,以防止意外输入字母或字符。
考虑以下功能:
var deposit = document.getElementById("deposit");
deposit.onkeyup = function() {
var PATTERN = /\d$/;
if (!deposit.value.match(PATTERN)) {
deposit.value = deposit.value.replace(deposit.value.slice(-1), "");
}
}
如果您只希望用户能够输入数字,这可以正常工作。任何其他角色都将被删除。我遇到麻烦的地方是提出一种模式,可以动态地匹配正面或负面货币(没有美元符号)。用户需要能够输入一个可选的负号,至少一个数字,后跟一个小数点,然后再输入2个数字。
存款金额示例:
0.09
100.45
4032.34
-0.90
-54.56
-1353.00
任何提供模式的帮助,或者甚至是更好的方法,都将非常感激。如果需要更多细节,请告诉我。
答案 0 :(得分:5)
您可以使用此验证模式来匹配这些数字值。
^-?\d+\.\d{2}$
答案 1 :(得分:2)
这应该符合您的要求:
var PATTERN = /\-?\d+\.\d{2}$/;
问号意味着它是可选的。
答案 2 :(得分:1)
请注意,每次按键时都无法匹配有效(负)小数,因为用户以减号或数字开头,这已经与模式不匹配。
您需要一个检查输入的字符是否有效,另一个检查提交时是否为有效小数,或者当用户从字段移动焦点时。
答案 3 :(得分:0)
这是我的最终解决方案。我实际上能够让我的“onkeyup”功能几乎像我想的那样工作。虽然它不会动态检查货币格式,但它不允许输入除指定的字母和字符以外的字母和字符。虽然这可能并不完美,但它确实符合我对这项小任务的需求。感谢所有有意见的人。
deposit.onkeyup = function() {
var PATTERN = /[^0-9-.]/;
if (deposit.value.match(PATTERN)) {
deposit.value = deposit.value.replace(deposit.value.slice(-1), "");
}
}
然后我验证了存款“onblur”的格式
var PATTERN = /\-?\d+\.\d{2}$/;
if (!reDeposit.value.match(PATTERN)) {
depositError.innerHTML = "Enter a valid amount";
}