我正在尝试使用正则表达式来验证文本框上的输入
表达式应该只允许数字,最多两位小数,数字前最多一个逗号 (,) 和一个减号(可选)。
有效:
- 0,25
- 10,2
- -7000
- -175,33
- 15555555555555,99
无效:
- 9,999
- 15.03
- 77,77,77
- 等等
我正在使用 ^[-+]?[\d ]+(,\d{0,2})?$
在 Jquery 代码中使用正则表达式来防止用户输入无效数字(event.preventDefault()):
$("input[name*='TB_mytbx']").on('keypress', function (event) {
var regex = new RegExp("^[-+]?[\d ]+(,\d{0,2})?$", "g");
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
event.preventDefault();
return false;
}
});
似乎只有一部分正则表达式有效。
它适用于数字(它不允许我输入字母)但它也不允许逗号 (,) 和减号 (-)。
我做错了什么?
编辑
在我使用之前:
if (focused.val().indexOf(',') != -1) {
var number = (focused.val().split(','));
if (number[1] && number[1].length >= 2) {
event.preventDefault();
return;
}
但这会产生烦人的行为。一旦您输入了两位数的数字,您就无法再进行编辑。例如:您不能将 200,50 更改为 300,50 或 100 300,50。 (你明白了)。我希望正则表达式可以以某种方式改变它。
最佳答案
我认为您将正则表达式过度复杂化了。这应该足够了:
^-?\d+(,\d\d)?$
^
行首,-?
可选减号,\d+
后面跟着一串数字,(,\d\d)?
后跟一个逗号和2个数字,这3个都是可选的。
(可选:(,\d{2})?
)$
行尾。
var regex = /^-?\d+(,\d\d)?$/;
console.log(regex.test('0,25'));
console.log(regex.test('-175,33'));
console.log(regex.test('15555555555555,99'));
console.log(regex.test('9,999'));
console.log(regex.test('15.03'));
console.log(regex.test('77,77,77'));
你有一个正则表达式来验证输入值。
现在,该代码块可以替换为:
$("input[name*='TB_mytbx']").on('keypress', function (event) {
var regex = /^-?\d+(,\d\d)?$/;
var value = $(this).val(); // Use the field's value, instead of the pressed key.
if (!regex.test(value)) {
event.preventDefault();
return false;
}
});
关于javascript - 我的正则表达式的某些部分不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43980997/