我有一个输入字段。
在此字段中,用户只能输入此格式的文本
1+1+2+3
最大1+1+1+1+1+1+1+1+1+1+1+1
(12x)
我该如何检查
只检查数字
var isnum = /^\d+$/.test($(this).val());
将是一半的工作,但更多我不知道如何...
答案 0 :(得分:4)
您可以使用量词来表示要接受的数量,所以:
var isnum = /^\d+(?:\+\d+){0,11}$/.test($(this).val());
这表示开头应接受任意数量的数字,并可以选择后面跟随+
的0到11个示例以及任意数量的数字。
实时示例:
function test(str, expect) {
var result = /^\d+(?:\+\d+){0,11}$/.test(str);
console.log(str, result, !result === !expect ? "Test:Pass" : "Test:FAIL");
}
test("1", true);
test("1+2+3+4+1234", true);
test("1+1+1+1+1+1+1+1+1+1+1+1", true);
test("1+1+1+1+1+1+1+1+1+1+1+1+1", false);
在您添加的评论中:
仅包含数字和加号,输入的最大数字必须为= 12、6 + 6或3 + 6 + 3 ...
那是完全不同的事情,您无法使用正则表达式对其进行合理的测试(您需要大量的替代方法)。相反,请使用正则表达式(例如上述代码)测试格式,然后执行总和:
if (/*...the format is good...*/) {
sum = str.split("+").reduce((a, b) => Number(a) + Number(b));
if (sum > 12) {
// disallow it
}
}
实时示例:
function test(str, expect) {
var result = /^\d+(?:\+\d+){0,11}$/.test(str);
if (result) {
result = str.split("+").reduce((a, b) => Number(a) + Number(b)) <= 12;
}
console.log(str, result, !result === !expect ? "Test:Pass" : "Test:FAIL");
}
test("1", true);
test("1+2+3+4+1234", false); // sum > 12
test("1+1+1+1+1+1+1+1+1+1+1+1", true);
test("1+1+1+1+1+1+1+1+1+1+1+1+1", false); // too many
test("12345", false); // sum > 12
我使用Number(x)
从字符串转换为数字,但是您有很多选项,我将详细介绍in this answer。