【问题标题】:How to check if one string ONLY contains items of an array?如何检查一个字符串是否仅包含数组项?
【发布时间】:2021-09-11 15:43:32
【问题描述】:

伙计们,我有一个字母数组,我想检查一个字符串是否只包含这个字母的项目。如果不是,我的机器人会将玩家踢出游戏。我设法编写了这个脚本:

var letters =
    "a b c d e f g h i j k l m n o p q r s t u v w x y z";
  var arrayLetters = letters.split(/ +/);
  var allLetters = arrayLetters.map((x) => x.toLowerCase());

  if (!allLetters.some((x) => player.name.includes(x)) {
    room.kickPlayer("Your name can't have strange fonts");
  }

实际上,这可行,但名称根本不包含字母。

例如,???????????????????? 会被踢出,但????????nda 不会,因为有一些字母是数组的一部分。我该如何解决这个问题?我还想在我的数组中保留只包含这些字母的玩家。

非常感谢您的回答!

【问题讨论】:

  • 这能回答你的问题吗? stackoverflow.com/questions/23476532/…
  • 您检查的是字符串是否包含数组的至少一个元素。例如,player.name = ["2","a"] 将始终返回`true`,因为至少有要检查相等性的对象,因此您的检查效率不高。

标签: javascript arrays sorting


【解决方案1】:

听起来有一个简单的正则表达式解决方案:

var letters = "abcdefghijklmnopqrstuvwxyz";
var regex = new RegExp("[^" + letters + "]", "i");
var players = ["?????", "??nda", "Panda"];
players.forEach(p =>
{
  console.log(p, regex.test(p));
});

基本思想是匹配任何不属于letters的字符

这种特殊情况也可以通过使用[^a-z] 来缩短:

var regex = new RegExp("[^a-z]", "i");
var players = ["?????", "??nda", "Panda"];
players.forEach(p =>
{
  console.log(p, regex.test(p));
});

附: 您不需要用空格分隔字母表来拆分它。 "abcd".split("") 会做同样的事情

【讨论】:

    【解决方案2】:

    Regex 是最适合您的解决方案。

    var letters = "a b c d e f g h i j k l m n o p q r s t u v w x y z";
    var arrayLetters = letters.split(/ +/);
    var allLetters = arrayLetters.map((x) => x.toLowerCase());
    var regex = new RegExp(`[^${allLetters.join('')}]`, 'i');
    if (regex.test(player.name)) {
      room.kickPlayer("Your name can't have strange fonts");
    }
    

    【讨论】:

      【解决方案3】:

      反过来做。使用some 遍历名称字符并测试它们是否存在于letters 中。

      const letters = 'a b c d e f g h i j k l m n o p q r s t u v w x y z';
      
      function validLetters(letters, name) {
        const found = [...name].some(letter => letters.includes(letter));
        return found ? `${name}: ok` : `${name}: Your name can\'t have strange fonts`;
      }
      
      console.log(validLetters(letters, '?????'));
      console.log(validLetters(letters, 'Bob'));
      console.log(validLetters(letters, 'BOB'));
      console.log(validLetters(letters, '123'));
      console.log(validLetters(letters, '??nda'));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 2011-04-04
        • 2021-05-06
        • 1970-01-01
        • 2021-04-06
        相关资源
        最近更新 更多