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