我正在尝试创建一个正则表达式来检查字符串,并将匹配点,破折号或下划线。我只希望它最多允许3个,否则它不应该与字符串匹配。
例如,如果我输入qwerty-123-123-123
没关系。
如果我输入something-123_world
没关系。
但是,如果我输入qwerty-123-_whatever-something
,则应该不匹配。
我当前的正则表达式与我想要的特定字符匹配,但是我似乎无法弄清楚如何只允许最多3个字符。我以为{1,3}
是答案,但这似乎没有用。我还查看了?=
的正向查询,但不确定是否正确/甚至能够使其执行我想要的操作。
答案 0 :(得分:2)
您可以使用
/^[^-_.]*(?:[-_.][^-_.]*){1,3}$/
请参见regex demo
详细信息
^
-字符串的开头[^-_.]*
-除-
,_
和.
以外的0个以上的字符(?:[-_.][^-_.]*){1,3}
-出现一次,两次或三次
[-_.]
-a -
,_
或.
[^-_.]*
-除-
,_
和.
以外的0个以上的字符$
-字符串的结尾。答案 1 :(得分:1)
除了Regex之外,另一个选择是使用JavaScript!
let str1 = 'qwerty-123-123-123';
let str2 = 'something-123_world';
let str3 = 'qwerty-123-_whatever-something';
const regex = /[._-]/g;
let min = 1;
let max = 3;
function validate(txt) {
var len = txt.match(regex).length;
if(len >= min && len <= max)
return true;
return false;
}
console.log(validate(str1) ? 'Valid' : 'Invalid');
console.log(validate(str2) ? 'Valid' : 'Invalid');
console.log(validate(str3) ? 'Valid' : 'Invalid');