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
,它将打印用户的输出而不会删除额外的白色空间。
我希望我对所有正在为此问题寻求解决方案的人都很有用。