如何在条件检查期间检查并从字符串中删除多余的空格

问题描述 投票:0回答:4
if (userResponseField.value.toUpperCase().includes('MY NAME IS ') === true || userResponseField.value.toUpperCase().includes('MY NAME\'S ') === true) {

我基本上要做的是创建某种聊天机器人并且它工作得很好,只是它被额外的空格混淆了。如何在状态检查期间将其删除?我已经找到了答案,但没有一个符合条件,但它们仍然是正确的,只是没有按照我想做的方式工作。注意:我不希望条件对字符串/变量本身进行更改。

javascript condition space
4个回答
1
投票

你可以使用正则表达式:

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

对于' My name is '等输入,返回true。

let predicate = str => !!str.match(/my\s+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)));

0
投票

看看trim

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

0
投票

您可以在值和硬编码字符串上使用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");
}

0
投票

又是我。我找到了一个聪明的方法来做到这一点,如果你们中的一些人,将来遇到这个问题并且刚刚找到了这个帖子,这就是我解决问题的方法:

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

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

例如:

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

忽略userName变量,它是代码的一部分,不需要立即显示。这是我做的另一个功能,第一个值是右侧聊天中显示的内容,显示用户的响应。逗号后面的字符串和变量是聊天左侧显示的内容,其中显示了聊天机器人的消息。但正如你所看到的,我不使用userResponseField.value。相反,我使用userResponseFieldOutput,它将打印用户的输出,而不会删除额外的空格。

我希望我对所有寻求解决这个问题的人都有用。

© www.soinside.com 2019 - 2024. All rights reserved.