通过preventDefault进行货币验证的正则表达式

时间:2017-01-10 06:46:22

标签: javascript angularjs regex validation angular-directive

我正在为货币输入验证编写一些JS,并希望阻止用户在输入中输入任何超出一组规则的字符。代码没有像我想象的那样工作,并且会喜欢关于如何处理的另一种意见。

例如 - 我目前专注于输入文本框并在同一个文本框中键入字符,如果我要输入减号,句号或数字之外的任何内容,因为用户键入输入框什么都不会出现。

  1. 减号(' - ')只能出现在短语的开头,而且只能出现一次
  2. 一旦'。'如果使用它,它不能再次使用,
  3. 之后只能跟随0,1或2个数字

    示例法律输入(尝试输入):

    • 100.00应为100.00
    • -100.00应为-100.00
    • 100应为100
    • 100.5应为100.5
    • 100..5应为100.5
    • 100-10应为10010
    • 1000.101应为1000.10

    我正在使用此代码:

        element.on('keypress', function(event) {
            var pattern = /^([-]?[\d]*[.]{1}[\d]{1,2})$/;
            var charCode = event.which | event.keyCode;
            var charStr = String.fromCharCode(charCode);
            if (!pattern.test(charStr)) {
                event.preventDefault();
            }
        });
    

    其中pattern是我正在使用的RegEx表达式,应该涵盖这些规则。不幸的是,尽管它成功地阻止了字符的类型,但频率不是这种情况(例如,如果我键入'---',这是合法输入,我的规则只需要允许第一个' - '并且连续尝试被阻止)

    有什么想法吗?

0 个答案:

没有答案