【发布时间】:2017-07-21 20:22:36
【问题描述】:
我对正则表达式很陌生,但我对正则表达式有疑问。
我只想允许用户输入正数,带或不带一个点和最多 2 位小数(也只能是 1 位小数)。当用户在文本框中输入文本时,如果他们输入了错误的格式,我想删除其他字符并将值替换为正确的格式。
有效例子:
123.12
2
56754
92929292929292.12
0.21
3.1
.90
无效示例:
12.1232
2.23332
e666.76
-1.23
-54.3242
3.98A
56B
BBB.12C
14.23.56
1..45
目前我找到了一种使用以下正则表达式的解决方案:
$("#SomeElement").keyup(function () {
this.value = this.value.replace(/(\.\d\d)\d+|([\d.]*)[^\d.]/, '$1$2')
});
这有两个问题
- 它允许我输入多个点。 (例如 123.89.80)
- 即使我像字母“a”一样键入一次,它会过滤,但如果我在键盘上按住字母“a”,它仍然允许输入(例如 AAAAAAAAA12),可能是因为“keyup”事件?
提前谢谢你。
【问题讨论】:
-
解决方案的一个想法\d*\.\d{1,2}$|\d*(?=\.)$
-
一个点和两个小数。 - 为什么
3.1应该有效?! -
@RomanPerekhrest 嗯,如果不能输入第一个小数,用户几乎无法输入第二个小数。我认为这种情况是不言而喻的。
-
@RomanPerekhrest 我的意思是最多 2 位小数。用户可以输入 1 位小数或 2 位小数。
标签: javascript regex numbers decimal