检测Javascript中字符串是否包含所有给定字符

3

我希望能找到一种智能、快速且简单的方法来检查字符串是否包含了所有预定义的字符。

例如:

var required = 'cfov'; //These are the char's to test for.

var obj = {valid: 'vvcdfghoco'}; //Valid prop can contains any string.

//what I have so far::
var valid = obj.valid, i = 0;
for(; i < 4; i++) {
  if(valid.indexOf(required.chatAt(i)) === -1) {
     break;
  }
}
if(i !== 3) {
  alert('Invalid');
}

我们能用正则表达式做吗?如果可以,求帮助!

提前感谢。

2个回答

3
你可以为搜索字符串构建一个前瞻正则表达式:
var re = new RegExp(required.split('').map(function(a) {
          return "(?=.*" + a + ")"; }).join(''));
//=> /(?=.*c)(?=.*f)(?=.*o)(?=.*v)/

根据您提供的信息,这个正则表达式为搜索字符串添加了前向界定符,以确保目标字符串中包含所有单个字符。

现在测试一下:

re.test('vvcdfghoco')
true
re.test('vvcdghoco')
false
re.test('cdfghoco')
false
re.test('cdfghovco')
true

我认为我们不需要使用map来构建RegExp,因为所需的字符是预定义的(请参见我的问题)。我可以安全地构建RegExp = /(?=.*c)(?=.*f)(?=.*o)(?=.*v)/ - Reddy
1
是的,如果它是预定义的搜索字符串,您绝对可以使用 /(?=.*c)(?=.*f)(?=.*o)(?=.*v)/。我想我关注的是搜索字符串可以是动态的,事先不知道。 - anubhava

1
你可以这样做:

var required = 'cfov'; //These are the char's to test for.


var valid = 'vvcdfghoco'; //Valid prop can contains any string.

var regex = new RegExp("^[" + valid + "]*$");
/* this line means: 
     from start ^ till * the end $ only the valid characters present in the class [] */


if (required.match(regex)) {
  document.write('Valid');
}
else {
  document.write('Invalid');
}

希望它有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接