Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过preventDefault进行货币验证的正则表达式_Javascript_Angularjs_Regex_Validation_Angular Directive - Fatal编程技术网

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

Javascript 通过preventDefault进行货币验证的正则表达式,javascript,angularjs,regex,validation,angular-directive,Javascript,Angularjs,Regex,Validation,Angular Directive,我正在编写一些关于货币输入验证的JS,希望阻止用户在输入中输入任何超出一组规则的字符。代码并没有像我所想的那样工作,我希望能就如何处理这个问题提出另一种意见 例如,我当前正专注于一个输入文本框,并在同一个文本框中键入字符,如果我要键入减号、句号或数字以外的任何内容,当用户在输入框中键入时,将不会显示任何内容 减号('-')只能出现在短语的开头,而且只能出现一次 一旦使用了“.”,就不能再使用它,后面只能跟0、1或2个数字 示例法律输入(尝试键入): 100.00应该是100.00 -100.0

我正在编写一些关于货币输入验证的JS,希望阻止用户在输入中输入任何超出一组规则的字符。代码并没有像我所想的那样工作,我希望能就如何处理这个问题提出另一种意见

例如,我当前正专注于一个输入文本框,并在同一个文本框中键入字符,如果我要键入减号、句号或数字以外的任何内容,当用户在输入框中键入时,将不会显示任何内容

  • 减号('-')只能出现在短语的开头,而且只能出现一次
  • 一旦使用了“.”,就不能再使用它,后面只能跟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
    是我正在使用的正则表达式,它应该涵盖这些规则。不幸的是,虽然它成功地阻止了字符类型,但频率并非如此(即,如果我键入'--',这是合法输入,我的规则只允许第一个'--',并阻止连续尝试)


    有什么想法吗?

    您正在用整个正则表达式测试单个字符。您必须强制执行实时验证吗?另一种想法是在“pattern”属性中使用regex,即
    。是的,我希望在这里实现实时验证。这个正则表达式似乎对“-”和“.”也不起作用。。。我在想另一种方法是检查这些字符的输入,并特别针对这些情况防止默认值。这是必要的还是我应该通过正则表达式来实现这个结果?