Как проверить и удалить лишние пробелы из строки во время проверки состояния - PullRequest
0 голосов
/ 30 апреля 2019
if (userResponseField.value.toUpperCase().includes('MY NAME IS ') === true || userResponseField.value.toUpperCase().includes('MY NAME\'S ') === true) {

Что я в основном пытаюсь сделать, так это создать своего рода чат-бота, и он работает отлично, просто он запутывается из-за лишних пробелов.Как я могу удалить их во время проверки состояния?Я искал ответы, но ни один из них не работал с условием, хотя они все еще верны, просто не работают так, как я хочу сделать все это.Примечание: я не хочу, чтобы условие вносило изменения в саму строку / переменную.

Ответы [ 4 ]

1 голос
/ 30 апреля 2019

Вы можете использовать регулярное выражение:

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

Возвращает true для таких входов, как ' My name is '.

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 голосов
/ 30 апреля 2019

это снова я.Я нашел умный способ сделать это, и если некоторые из вас в будущем столкнутся с этой проблемой и только что нашли эту ветку, вот как я решил эту проблему:

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

Поскольку этот код, наряду сс условием, которое я опубликовал выше, сохраняются в функции, userResponseFieldOutput - это то, что я собираюсь использовать для вывода сообщений пользователя в окне чата.Он остается неотредактированным, в то время как у userResponseField.value его пробелы удалены.

Например:

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

Игнорировать переменную userName, это часть кода, которая не имеетчтобы показать прямо сейчас.Это еще одна функция, которую я сделал, первое значение - это то, что отображается в чате справа, где отображаются ответы пользователя.Строка и переменная после запятой - это то, что отображается в левой части чата, где отображаются сообщения чат-бота.Но, как вы видите, я не использую userResponseField.value.Вместо этого я использую userResponseFieldOutput, который будет печатать вывод пользователя без удаления лишних пробелов.

Надеюсь, я был полезен для всех вас, кто ищет решение этой проблемы.

0 голосов
/ 30 апреля 2019

Вы можете использовать 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 голосов
/ 30 апреля 2019

Посмотрите на отделка :

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