检查字符串是否在字符串中的任何位置包含1-3个.-_字符

时间:2018-11-08 17:47:53

标签: javascript regex

我正在尝试创建一个正则表达式来检查字符串,并将匹配点,破折号或下划线。我只希望它最多允许3个,否则它不应该与字符串匹配。

例如,如果我输入qwerty-123-123-123没关系。

如果我输入something-123_world没关系。

但是,如果我输入qwerty-123-_whatever-something,则应该不匹配。

Current regex

我当前的正则表达式与我想要的特定字符匹配,但是我似乎无法弄清楚如何只允许最多3个字符。我以为{1,3}是答案,但这似乎没有用。我还查看了?=的正向查询,但不确定是否正确/甚至能够使其执行我想要的操作。

2 个答案:

答案 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');