Java脚本输入格式验证

时间:2019-06-04 02:47:11

标签: javascript regex

我想验证以下输入字段之一的格式

1111-111-111 //4digits- 3digits- 3digits

我尝试了以下方法,但无法正常工作。知道我误会了什么吗?

function(value) {
    var patt = "/^\d{4}-d{3}-d{3}$/";
    var res = value.match(patt);
    if (!res) {
        return {
            status: 2,
            message: 'Input should be formatted as 0000-000-000'
        };
    } else {
        return {
            status: 0
        };
    }
}

另外,给定一个字符串,我想在某些索引为空的地方强制使用字符。 例如:总共23个字符,其中第2、9、11和13-21是空格字符。 我是Java regex的新手,我们如何执行这些规则?

3 个答案:

答案 0 :(得分:2)

您的正则表达式是错误的。修复它:

/^\d{4}-\d{3}-\d{3}$/

您的第二部分和第三部分是“ d”字符,而不是数字。 并在声明正则表达式时删除"字符。

var patt = /^\d{4}-\d{3}-\d{3}$/;

答案 1 :(得分:2)

如果我们只希望传递4-3-3位数字,则可以使用:

^[0-9]{4}-[0-9]{3}-[0-9]{3}$

Demo

或:

^\d{4}-\d{3}-\d{3}$

Demo

如果我们也希望捕获电话号码,我们将添加一个捕获组:

^([0-9]{4}-[0-9]{3}-[0-9]{3})$

const regex = /^[0-9]{4}-[0-9]{3}-[0-9]{3}$/gm;
const str = `1111-111-111
1111-111-1111
8888-888-888`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 2 :(得分:1)

第一个模式不能按预期工作,因为要匹配一个数字,您必须像\d这样转义d,否则d{3}会匹配一个d字符的3倍,并且该模式应不是在双引号之间,而是在/ ... /

之间

let test = function(value) {
  var patt = /^\d{4}-\d{3}-\d{3}$/;
  var res = value.match(patt);
  if (!res) {
    return {
      status: 2,
      message: 'Input should be formatted as 0000-000-000'
    };
  } else {
    return {
      status: 0
    };
  }
};

console.log(test("1111-111-111"));

要在字符串的第2、9、11和13-21位匹配空格,可以使用quantifiers\S来匹配非空白字符:

^\S \S{6} \S \S {11}$

Regex demo

如果要基于零索引进行索引匹配,则模式如下:

^\S\S \S{6} \S \S {10}$

Regex demo