Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试是否所有给定字符';s是字符串-Javascript_Javascript_Regex - Fatal编程技术网

测试是否所有给定字符';s是字符串-Javascript

测试是否所有给定字符';s是字符串-Javascript,javascript,regex,Javascript,Regex,我正在寻找智能、快速和简单的方法来检查字符串是否包含所有预定义的字符 例如: 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++) { i

我正在寻找智能、快速和简单的方法来检查字符串是否包含所有预定义的字符

例如:

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');
}
var required='cfov'//这些是要测试的字符。
var obj={valid:'vvcdfghoco'}//有效的属性可以包含任何字符串。
//到目前为止我所拥有的:
var valid=obj.valid,i=0;
对于(;i<4;i++){
if(有效的.indexOf(必需的.chatAt(i))=-1){
打破
}
}
如果(i!==3){
警报(“无效”);
}
我们可以用RegExp做吗?如果是,请提供任何帮助


提前感谢。

您可以为搜索字符串构建一个前瞻正则表达式:

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
您可以这样做:

var required='cfov'//这些是要测试的字符。
var valid='vvcdfghoco'//有效的属性可以包含任何字符串。
var regex=new RegExp(“^[”+valid+“]*$”);
/*这一行的意思是:
从start^到*end$仅类[]中存在的有效字符*/
如果需要(匹配(正则表达式)){
文件。写入(“有效”);
}
否则{
文件。写入(“无效”);

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