在状态检查期间,如何检查并删除字符串中的额外白色空间


if (userResponseField.value.toUpperCase().includes('MY NAME IS ') === true || userResponseField.value.toUpperCase().includes('MY NAME'S ') === true) {

我基本上要做的就是创建某种聊天机器人,并且它运行得很好,只是它被额外的whitespaces混淆了。在情况检查期间,如何将它们删除?我正在寻找答案,但是它们都没有在这种情况下工作,但是它们仍然是正确的,只是不使用我想做整个事情的方式。注意:我不希望条件对字符串/变量本身进行更改。

您可以使用Regex:

if (userResponseField.value.match(/mys+name(s+i|')s/gi))

这对于诸如 ' My name is '

之类的输入返回

let predicate = str => !!str.match(/mys+name(s+i|')s/gi);
[
  'my NaME    iS    ',
  'my NaME's',
  'my name s',
  'my ame is',
  'my nameis',
].forEach(input => console.log(input, ':', predicate(input)));

在修剪上看一下:

if (
userResponseField.value.toUpperCase().trim().includes('MY NAME IS') === true ||
 userResponseField.value.toUpperCase().trim().includes('MY NAME'S') === true
) {

您可以在值和硬编码字符串上使用String.prototype.trim()

var userResponseField = {};
userResponseField.value = 'MY NAME IS';
if (userResponseField.value.toUpperCase().trim().includes('MY NAME IS '.trim()) === true || userResponseField.value.toUpperCase().trim().includes('MY NAME'S '.trim()) === true) {
console.log("true");
}

再次是我。我找到了一种聪明的方法来做到这一点,如果你们中有些人将来有这个问题并刚刚找到了这个话题,这就是我解决我的问题的方法:

var userResponseFieldOutput = userResponseField.value;
userResponseField.value = userResponseField.value.replace(/s+/g, ' ');if 

由于此代码以及上面发布的条件都存储在函数中,因此我将使用userResponseFieldOutput在聊天框中输出用户的消息。它仍然未经编辑,而userResponseField.value已删除其空间。

例如:

chatResponse(userResponseFieldOutput, "Hi, " + userName);

忽略userName变量,它是目前不必显示的代码的一部分。这是我制作的另一个函数,第一个值是在右侧显示聊天中显示的内容,其中显示了用户的响应。逗号后的字符串和变量是聊天机器人消息的左侧出现的。但是如您所见,我不使用userResponseField.value。相反,我正在使用userResponseFieldOutput,它将打印用户的输出而不会删除额外的白色空间。

我希望我对所有正在为此问题寻求解决方案的人都很有用。

最新更新