if (userResponseField.value.toUpperCase().includes('MY NAME IS ') === true || userResponseField.value.toUpperCase().includes('MY NAME\'S ') === true) {
我基本上要做的是创建某种聊天机器人并且它工作得很好,只是它被额外的空格混淆了。如何在状态检查期间将其删除?我已经找到了答案,但没有一个符合条件,但它们仍然是正确的,只是没有按照我想做的方式工作。注意:我不希望条件对字符串/变量本身进行更改。
你可以使用正则表达式:
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)));
看看trim:
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
,它将打印用户的输出,而不会删除额外的空格。
我希望我对所有寻求解决这个问题的人都有用。