我想验证以下输入字段之一的格式
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的新手,我们如何执行这些规则?
答案 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}$
或:
^\d{4}-\d{3}-\d{3}$
如果我们也希望捕获电话号码,我们将添加一个捕获组:
^([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}`);
});
}
jex.im可视化正则表达式:
答案 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}$
如果要基于零索引进行索引匹配,则模式如下:
^\S\S \S{6} \S \S {10}$