1

我正在尝试为十进制数创建一个正则表达式,同时“-”或“+”符号在开始时是可选的。

有很多关于这个的信息,所以我完成了这个:

/^[+-]?\d+(\.\d+)?$/

因此,我已经使用该test()功能在控制台中对此进行了测试,并且运行良好。

我的问题更多关于在哪里进行检查:

  • 如果检查在keypress事件中,我可以使用preventDefault()以“使用”不正确的符号,但我正在检索这样的文本并且无法访问最后输入的符号 -$(event.target).val()

  • 如果检查是在keyup事件我可以访问整个文本,但我无法删除不正确的符号,因为我不知道它是哪个,以及它被放在哪里(使用鼠标可以把它放在开始或在有效字符串的中间)

我需要检查符号组合,而不是仅验证符号。例如:

- //invalid
- 1 //valid
1. //invalid
1.2 //valid

所以,我想我应该在输入整个字符串时检查,但是,如何两个删除不正确的字符?在无效时删除整个字符串看起来不正确。

4

1 回答 1

4

以下是一种可能的方式来告诉用户他们的输入是否有任何问题,因为他们继续输入。单击此处查看示例演示。

此外,我们还可以添加<div>允许的字符/格式列表。这除了让用户知道有问题之外,还会告诉他们什么构成了有效输入。

HTML:

<input id='ip' type='text'/>

JS:

var regex = new RegExp(/^[+-]?\s*\d+(\.\d+)?$/);

document.getElementById('ip').onkeyup = function(){
    var inputVal = this.value;
    if(!(regex.test(inputVal))) this.className='err';
    else this.className='noerr';
}

CSS:

.noerr{
    color: green;
}
.err{
    color: red;
}

注意: HTML5 有内置的方法来验证输入,也有伪类:invalid,就像:valid上面的例子一样。如果您可以使用 HTML5,请尝试此示例。第二个输入字段是使用 HTML5 完成的(不需要 JS)。

HTML5:

<input id='iphtml5' pattern='[+-]?\s*\d+(\.\d+)?' type='text' />

CSS:

#iphtml5:valid{
    color: green;
}
#iphtml5:invalid{
    color: red;
}
于 2013-09-16T12:42:12.627 回答