如何检查值是否为首选格式

时间:2019-02-13 11:04:33

标签: javascript jquery regex

我有一个输入字段。

在此字段中,用户只能输入此格式的文本

1+1+2+3

最大1+1+1+1+1+1+1+1+1+1+1+1(12x)

我该如何检查 只检查数字 var isnum = /^\d+$/.test($(this).val()); 将是一半的工作,但更多我不知道如何...

1 个答案:

答案 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