输入规则很简单:
学生成绩的计算... 插入的音符必须从0.0到10.0 ...
用户还可以输入“ f”字符表示学生失踪了……
我能够阻止字符并使用正则表达式生成“ POINT”。
有什么问题:
输入不能正确生成正则表达式,我需要输入3个字符而不是2个字符来插入点
输入字符f时,如果先输入数字,则应阻止数字,反之亦然
它允许您在输入中输入3个以上的字符,我知道这是在input属性中,但是我将其保留为3个,以便能够插入该点。
功能
:blockCharactersTwo(_event){
let keyPressed = _event.charCode;
(keyPressed >= 48 && keyPressed <= 57 || keyPressed === 46 || keyPressed === 102) ? null : _event.preventDefault();
}
convertToDecimal(_element){
_element.value = _element.value.replace(/(\d{1})(\d{1,2})$/,"$1.$2") // Insere o PONTO ANTES dos ÚLTIMOS 2 digitos
}
输入和输出示例:
1) 80 => 8.0
2) 01 => 0.1
3) number => block caracter "F"
4) "f" => block number
5) "f" => if you type "f" do not enter any more characters and not even "f".
答案 0 :(得分:0)
我将使用一个用于keydown事件的处理程序,以及一个用于重新格式化的单独程序来简化此操作。正则表达式/^([fF]{1}|\d{1}\.\d{1}|10\.00?)$/
on regex101.com shows how it works。 gmodels
表达式只是寻找三个数字的正确模式。
这里的窍门是,如果您希望允许他们输入100并将其格式设置为10.0,则无法阻止它们输入值> 10.0,因为数字100> 10.0。因此,我将格式化从sel
处理程序中分离出来,并添加了sex
处理程序来进行格式化。它还可以验证格式化的数字是否小于或等于10.0。在这里,我使用HTML5 constraint validation是为了易于实现。
值得注意的另一件事是,我正在使用KeyboardEvent.key
,这是对该标准的较新添加。对于产生不可打印字符的键,它将返回诸如“ Delete”和“ Backspace”之类的字符串。在这种情况下,我假设所有允许这样做的键都可以允许(您可能希望能够删除该值)。
allNumbersRe
keydown
blur