用于带一个点和2个小数点的正数的JavaScript正则表达式
我对正则表达式很陌生,我对正则表达式有一个问题 我想只允许用户输入正数,带或不带一个点,最多2位小数(也只能是1位小数)。当用户在文本框中键入文本时,如果他们键入了错误的格式,我希望删除其他字符并用正确的格式替换该值 有效例子:用于带一个点和2个小数点的正数的JavaScript正则表达式,javascript,regex,numbers,decimal,Javascript,Regex,Numbers,Decimal,我对正则表达式很陌生,我对正则表达式有一个问题 我想只允许用户输入正数,带或不带一个点,最多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 无效示例: 123.12 2
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
无效示例:
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')
});
这有两个问题
提前谢谢。我现在已经测试过了,它可以工作了,试一试:
$("#SomeElement").keyup(function () {
this.value = this.value.replace(/([^\d]*)(\d*(\.\d{0,2})?)(.*)/, '$2');
});
尝试使用以下正则表达式:
请参见尝试此
^\s*(?=.[1-9])\d*(?:\。\d{1,2})?\s*
我不会尝试使用一个正则表达式执行此操作。这样的正则表达式肯定会让你做噩梦,并导致数不清的bug。省省你自己的麻烦,特别是如果你是新的正则表达式
我将此任务分解为以下算法:
$("#SomeElement").on('input', function () {
var filtered = this.value.replace(/[^0-9.]/g, '').split('.')
var integer = filtered.shift()
var hasDecimal = filtered.length > 0
var fraction = filtered.join('').slice(0, 2)
this.value = integer + (hasDecimal ? '.' + fraction : '')
});
哦,并绑定到输入
事件,而不是按键
、按键
或按键
。它们都有缺点。我可能会建议使用this.selectionStart
和this.setSelectionRange()
保存用户的插入符号位置,或者如果他们试图返回编辑部分输入,就会出现一些不稳定的行为。这看起来基本上是这样的:
var caretPos = this.selectionStart
this.value = ...
this.setSelectionRange(caretPos, caretPos)
尽管您可能希望对其进行一些修改,以获得所需的行为。这是一个完整的例子。干杯。对于第一个问题,请参考一个解决方案\d*\。\d{1,2}$\d*(?=\)$一个点和两个小数。-为什么
3.1
应该有效@RomanPerekhrest嗯,如果用户不能输入第一个小数点,那么他们很难输入第二个小数点。“我认为这种情况是不言而喻的。”罗曼佩雷克勒斯我的意思是小数点后2位。用户可以键入1个十进制数或2个十进制数。$(“#TextboxElement”).keyup(函数(){this.value=this.value.replace(/^\s*(?=.[1-9])\d*(?:\。\d{1,2})?\s*/,'';});我试着这样做,但还是不行。谢谢你的正则表达式。但我想做的是用正确的格式替换错误的格式。类似于$(“#TextboxElement”).keyup(函数(){this.value=this.value.replace(/^\?(?!-)\d+(?:\。\d{1,2})$/,'';});但如果我只是那样做是行不通的。有什么主意吗?我已经修好了,再试一次非常感谢!!这正是我想要的!!很高兴我能帮忙