Я хочу устранить разницу между ответом на сообщение с помощью ручного ввода и копированием в командах - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу, чтобы два результата были одинаковыми. Может кто-нибудь, пожалуйста, дайте мне решение.
Результат отличается между отправкой сообщений вручную и копированием и вставкой в ​​Команды.

После создания простого бота, чтобы определить, является ли он адресом электронной почты,
введите сообщение: testtest@test.com

Результат:
Ручной ввод: возвращаемое сообщение = "Это MailAddress "
Копировать вставить: return message =" Это не MailAddress "

Мне было интересно, был ли тип ввода другим, но он был тем же.
Я подумал, что регулярное выражение было неправильным , но я не думаю, что это было результатом ввода того же адреса электронной почты.

Исходный код выглядит следующим образом:

        private async Task <DialogTurnResult> OneStepAsync (WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var check = IsMailAddress(stepContext.Context.Activity.Text);
            if (!check) {
                stepContext.Context.SendActivityAsync (MessageFactory.Text ("It isn't MailAddress"), cancellationToken);
            } else {
                stepContext.Context.SendActivityAsync (MessageFactory.Text ("It is MailAddress"), cancellationToken);
            }
            return await stepContext.EndDialogAsync (cancellationToken: cancellationToken);
        }
        public static bool IsMailAddress (string address)
        {
            if (string.IsNullOrEmpty (address))
            {
                return false;
            }
            return Regex.IsMatch (
                address, @ "^ [A-Z0-9 ._% +-] + @ [A-Z0-9 .-] + \. [A-Z] {2,4} $",
                RegexOptions.IgnoreCase
            );
        }

Ответы [ 2 ]

4 голосов
/ 06 февраля 2020

Когда вы копируете вставку в Команды, это добавляет дополнительное пространство для начала и конца текста.

Например, когда я копирую вставленную «помощь». Я получил Activity.Text, как показано ниже в моем боте

enter image description here

Вы должны Обрезать текст ввода перед его использованием.

var check = IsMailAddress(stepContext.Context.Activity.Text?.Trim());
0 голосов
/ 06 февраля 2020

Идея копирования вставки работает отлично, но часто случается так, что в процессе появляются дополнительные вещи. Например, Microsoft включает в буфер обмена время и имя оригинального постера массажа, чтобы при копировании могло появиться сообщение «foo»:

[7:34 AM] Megan Bowen
foo

, даже если оно не имеет названия / время, и вы удалите его, вы часто будете заканчиваться разрывом строки в окне сообщения, поэтому вместо:

foo

Иногда вы будете иметь:

[empty line]
foo

Вы можете обслуживать все эти шаблоны, обновляя свое регулярное выражение соответствующим образом. Первый пример (время / имя) потребует полного обновления шаблона. Во втором примере (открытие переноса строки) вы можете либо решить его с помощью команды .Trim (), либо, поскольку вы уже используете регулярное выражение, вы также можете просто обновить шаблон, чтобы удалить «ведущие пробелы».

надеюсь, что это поможет

...