检查字符串中是否每个字符

时间:2019-01-25 07:37:52

标签: javascript

我正在尝试为大量字符设置if条件。

我可以使用

if (str==!||str==@||str==#||str==$||str==^||str==&)

依此类推,但这似乎效率很低。如果这些字符位于以下字符上,我想获得条件才能工作:

!@#%$^&()_-+=\?/.,'][{}<>`~

有没有更短,更有效的方法?

for (var c0 = 1; c0 > fn.length++; c0++) {
 var str = fn.charAt(c0--);

 if (str ==-"!@#%$^&()_-+=\?/.,'][{}<>`~") {

 }
}

我希望上面的字符串中的每个字符都包含支票。

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式character class来检查您的字符是否与特定字符匹配:

/^[\!@#%$\^&\(\)_\-\+=\?\/\.,'\]\[\{\}\<\>`~]$/

在这里,我转义了特殊字符,以使它们像普通字符一样被对待。

请参见下面的工作示例:

const regex = /^[\!@#%$\^&\(\)_\-\+=\?\/\.,'\]\[\{\}\<\>`~]$/,
charA = '@', // appears in char set
charB = 'A'; // doesn't appear in char set

console.log(regex.test(charA)); // true
console.log(regex.test(charB)); // false

或者,如果您不想使用正则表达式,则可以将所有字符放入数组中,并使用.includes检查字符是否在数组中。

const chars = "!@#%$^&()_-+=\?/.,'][{}<>`~",
charArr = [...chars],
charA = '@', // is in char set
charB = 'A'; // isn't in char set

console.log(charArr.includes(charA)); // true
console.log(charArr.includes(charB)); // false

答案 1 :(得分:1)

仅使用正则表达式而不是手动的单字符检查。

const pattern = new RegExp("!@#%$^&()_-+=\?\/.,'][{}<>`~");
const exists = pattern.test(str);

if (exists) { 
  // code logic for special character exists in string
}

答案 2 :(得分:0)

首先,您可以使用split('')将字符串拆分为字符数组。接下来,您可以使用.some检查数组中至少一个元素的条件是否为真:

"!@#%$^&()_-+=\?/.,'][{}<>`~".split('').some(x => x === str)