if (userResponseField.value.toUpperCase().includes('MY NAME IS ') === true || userResponseField.value.toUpperCase().includes('MY NAME\'S ') === true) {
我基本上想做的是创建某种聊天机器人,并且它运行良好,只是它被多余的空格弄糊涂了。在条件检查期间如何删除它们?我一直在寻找答案,但没有一个与条件有关,尽管它们仍然是正确的,只是没有以我想要做的整体方式来工作。注意:我不希望条件改变字符串/变量本身。
答案 0 :(得分: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)));
答案 1 :(得分:0)
看看trim:
if (
userResponseField.value.toUpperCase().trim().includes('MY NAME IS') === true ||
userResponseField.value.toUpperCase().trim().includes('MY NAME\'S') === true
) {
答案 2 :(得分: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");
}
答案 3 :(得分:0)
又是我。 我找到了一种聪明的方法来执行此操作,如果将来某些人遇到此问题并且刚刚找到此线程,这就是我解决问题的方法:
var userResponseFieldOutput = userResponseField.value;
userResponseField.value = userResponseField.value.replace(/\s+/g, ' ');if
由于此代码以及我在上面发布的条件都存储在一个函数中,因此我将使用userResponseFieldOutput
在聊天框中输出用户的消息。尽管userResponseField.value
的空格已删除,但仍未编辑。
例如:
chatResponse(userResponseFieldOutput, "Hi, " + userName);
忽略userName
变量,它是代码的一部分,现在不必显示。这是我做的另一个功能,第一个值是右侧聊天中显示的内容,其中显示了用户的响应。聊天左侧显示的是字符串和逗号后面的变量,其中显示了聊天机器人的消息。但是如您所见,我不使用userResponseField.value
。相反,我使用的是userResponseFieldOutput
,它将打印用户的输出而不会删除多余的空白。
希望对寻求该问题解决方案的所有人都有用。