Javascript货币正则表达式替换

时间:2015-08-13 22:49:49

标签: javascript regex input replace currency

对于我的商务网络应用程序,我希望用户只能在文本框中输入有效的货币值。

目前我使用

$input.val($input.val().replace(/[^.\d]/g, ''));

但是这并没有考虑到顺序或多个小数分隔符。

因此用户必须输入整数或有效的十进制值,例如:

  • 49
  • 49.50

如果允许,也可以获得奖励积分:

  • .50(0.50)

所以我不想验证,我想限制在文本框中输入。单个正则表达式替换可以实现吗?

1 个答案:

答案 0 :(得分:0)

提供错误建议更方便用户,让用户自行修复错误。您可能会考虑使用keyup事件,但过早显示错误(在用户有机会输入有效值之前)也会很烦人。 e.g。

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&nbsp;<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>