如何在ES6中为浮动类型输入创建掩码?

时间:2018-09-13 01:50:00

标签: javascript ecmascript-6

输入规则很简单:

学生成绩的计算... 插入的音符必须从0.0到10.0 ...

用户还可以输入“ f”字符表示学生失踪了……

我能够阻止字符并使用正则表达式生成“ POINT”。

有什么问题:

  1. 输入不能正确生成正则表达式,我需要输入3个字符而不是2个字符来插入点

  2. 输入字符f时,如果先输入数字,则应阻止数字,反之亦然

  3. 它允许您在输入中输入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".

1 个答案:

答案 0 :(得分:0)

我将使用一个用于keydown事件的处理程序,以及一个用于重新格式化的单独程序来简化此操作。正则表达式/^([fF]{1}|\d{1}\.\d{1}|10\.00?)$/ on regex101.com shows how it worksgmodels表达式只是寻找三个数字的正确模式。

这里的窍门是,如果您希望允许他们输入100并将其格式设置为10.0,则无法阻止它们输入值> 10.0,因为数字100> 10.0。因此,我将格式化从sel处理程序中分离出来,并添加了sex处理程序来进行格式化。它还可以验证格式化的数字是否小于或等于10.0。在这里,我使用HTML5 constraint validation是为了易于实现。

值得注意的另一件事是,我正在使用KeyboardEvent.key,这是对该标准的较新添加。对于产生不可打印字符的键,它将返回诸如“ Delete”和“ Backspace”之类的字符串。在这种情况下,我假设所有允许这样做的键都可以允许(您可能希望能够删除该值)。

allNumbersRe
keydown
blur