Javascript 货币正则表达式替换
Javascript currency regular expression replace
对于我的业务 Web 应用程序,我希望用户只能在文本框中输入有效的货币值。
目前我在用
$input.val($input.val().replace(/[^.\d]/g, ''));
但这并没有考虑顺序或多个小数分隔符。
因此用户必须输入整数或有效的小数值,例如:
- 49
- 49.50
如果允许也可以加分:
- .50(0.50)
所以我不想验证,我想限制在文本框中输入。这可以用单个正则表达式替换吗?
我们可以分两步完成。限制用户只能输入数字字符和 .
个字符。
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode < 31 && (charCode > 48 || charCode < 57))
return true;
return false;
下一个是允许 .
:
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode == 46 && (charCode > 31 && (charCode < 48 || charCode > 57)))
return true;
return false;
下一步将不允许双期。
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode == 46 && (charCode > 31 && (charCode < 48 || charCode > 57)))
if (charCode == 46 && value.indexOf(".") !== false)
return true;
return false;
希望您能以此为起点。
片段
公开交易:如果可以就打破它。
function check(inp) {
var charCode = (event.which) ? event.which : event.keyCode;
console.log(charCode);
if (charCode == 8)
return true;
if ((charCode > 46 && charCode < 58) || (charCode > 95 && charCode < 106) || charCode == 110 || charCode == 190)
if (charCode == 110 || charCode == 190)
if (inp.value.indexOf(".") == -1)
return true;
else
return false;
else
return true;
return false;
}
<input type="text" onkeydown="return check(this);" />
建议错误并让用户自行修复更友好。您可能会考虑使用 keyup 事件,但过早显示错误(在用户有机会输入有效值之前)也可能很烦人。例如
function validate(el) {
var type = el.className;
var errEl = document.getElementById(el.name + 'Err');
if (type == 'typeCurrency') {
var currencyRe = /^-?(\d+(\.\d{1,2})?|\.\d{1,2})$/;
errEl.style.visibility = currencyRe.test(el.value)? 'hidden' : 'visible';
}
}
.errorMessage {
color: red;
background-color: white;
visibility: hidden;
}
Cost <input onblur="validate(this)" name="foo" class="typeCurrency" placeholder="0.00"><br>
<span id="fooErr" class="errorMessage">Please enter a valid cost, e.g. 2.45</span>
对于我的业务 Web 应用程序,我希望用户只能在文本框中输入有效的货币值。
目前我在用
$input.val($input.val().replace(/[^.\d]/g, ''));
但这并没有考虑顺序或多个小数分隔符。
因此用户必须输入整数或有效的小数值,例如:
- 49
- 49.50
如果允许也可以加分:
- .50(0.50)
所以我不想验证,我想限制在文本框中输入。这可以用单个正则表达式替换吗?
我们可以分两步完成。限制用户只能输入数字字符和 .
个字符。
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode < 31 && (charCode > 48 || charCode < 57))
return true;
return false;
下一个是允许 .
:
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode == 46 && (charCode > 31 && (charCode < 48 || charCode > 57)))
return true;
return false;
下一步将不允许双期。
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode == 46 && (charCode > 31 && (charCode < 48 || charCode > 57)))
if (charCode == 46 && value.indexOf(".") !== false)
return true;
return false;
希望您能以此为起点。
片段
公开交易:如果可以就打破它。
function check(inp) {
var charCode = (event.which) ? event.which : event.keyCode;
console.log(charCode);
if (charCode == 8)
return true;
if ((charCode > 46 && charCode < 58) || (charCode > 95 && charCode < 106) || charCode == 110 || charCode == 190)
if (charCode == 110 || charCode == 190)
if (inp.value.indexOf(".") == -1)
return true;
else
return false;
else
return true;
return false;
}
<input type="text" onkeydown="return check(this);" />
建议错误并让用户自行修复更友好。您可能会考虑使用 keyup 事件,但过早显示错误(在用户有机会输入有效值之前)也可能很烦人。例如
function validate(el) {
var type = el.className;
var errEl = document.getElementById(el.name + 'Err');
if (type == 'typeCurrency') {
var currencyRe = /^-?(\d+(\.\d{1,2})?|\.\d{1,2})$/;
errEl.style.visibility = currencyRe.test(el.value)? 'hidden' : 'visible';
}
}
.errorMessage {
color: red;
background-color: white;
visibility: hidden;
}
Cost <input onblur="validate(this)" name="foo" class="typeCurrency" placeholder="0.00"><br>
<span id="fooErr" class="errorMessage">Please enter a valid cost, e.g. 2.45</span>