我有一个输入字段。
在此字段内,用户只能输入此格式的文本
1+1+2+3
最大1+1+1+1+1+1+1+1+1+1+1+1(12x)
我如何检查这个只检查数字
var isnum = /^\d+$/.test($(this).val());
将是一半的工作,但更多我不知道如何......
我有一个输入字段。
在此字段内,用户只能输入此格式的文本
1+1+2+3
最大1+1+1+1+1+1+1+1+1+1+1+1(12x)
我如何检查这个只检查数字
var isnum = /^\d+$/.test($(this).val());
将是一半的工作,但更多我不知道如何......
您可以使用量词来表示接受多少,因此:
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);
在您添加的评论中:
es 只有数字和加号,输入数字的最大值必须为 = 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)将字符串转换为数字,但是你有很多选择,我在这个答案中详细说明。