我有一个文本框,我希望只允许最多11个数字,一个可选的逗号,以及两个以后的数字。将键按入文本框时,不应呈现任何其他内容:
$('#txt').keypress(function (e) {
var code = e.which;
var key = String.fromCharCode(code);
// REGEX TO AVOID CHARS & A DOT (.)
var pattern = /[a-zA-Z]|\./g;
var isMatch = pattern.test(key);
if (isMatch) {
// DO NOT RENDER CHARS & dot
e.preventDefault();
}
});
上面的代码在按下无效键时起作用,例如char或dot,但不保证只有一个逗号,之后只有2个数字。
这必须匹配:
12314
123123,44
这一定不能:
12313,6666
Here是一个演示。
更新: 必须避免除数字和逗号之外的任何数字,因此我提出的正则表达式无效,因为只能阻止点(。)。
答案 0 :(得分:3)
您应该测试完整的字符串,而不仅仅是当前的字母。
$('#txt').keypress(function (e) {
var key = String.fromCharCode(e.which);
var pattern=/^[0-9]{1,11}(,[0-9]{0,2})?$/;
// test this
var txt = $(this).val() + key;
if (!pattern.test(txt)) {
e.preventDefault();
}
});
答案 1 :(得分:2)
此regex
将匹配包含1个最多11个数字的字符串,可选地后跟,
,还有2个数字:^[0-9]{1,11}(,[0-9]{2})?$
说明:
^ # Match the start of the string
[0-9]{1,11} # Followed by a maximum of 11 digits
(,[0-9]{2})? # Optionally followed by a comma and 2 more digits
$ # Followed by the end of the string
在行动here中查看。