2015-09-25 30 views
3

我在寻找智能,快速和简单的方法来检查,如果字符串包含所有预定义字符的的。测试,如果所有给定char的是字符串 - 的JavaScript

例如:

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'); 
} 

我们能做到的正则表达式?如果是的话,任何帮助PLZ!

在此先感谢。

回答

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 
+0

我不认为我们需要用地图来构造正则表达式,因为所需字符的是预定义的(见我的问题)。我可以肯定地构建正则表达式='/(?=.* C)(?=。* F)(?=。* O)(?=。* V)/' – user3130446

+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'); 
 
}

希望它能帮助。

相关问题