Сканирование / сопоставление некорректных сообщений об ошибках ввода - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь посчитать правильные входные данные от пользователя.Вход выглядит следующим образом:

m = "<ex=1>test xxxx <ex=1>test xxxxx test <ex=1>"

Тег ex=1 и слово test должны быть связаны и в этом конкретном порядке считаться правильными.В случае неверного ввода я хочу отправить пользователю сообщение об ошибке, объясняющее ошибку.

Я попытался сделать это, как написано ниже:

ex_test_size = m.scan(/<ex=1>test/).size  # => 2
test_size = m.scan(/test/).size  # => 3
ex_size = m.scan(/<ex=1>/).size  # => 3

puts "lack of tags(<ex=1>)" if ex_test_size < ex_size
puts "Lack of the word(test)" if ex_test_size < test_size

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

1 Ответ

0 голосов
/ 28 мая 2018

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

#⇒ ["xxx test", "<ex=1>"]
m.scan(/<ex=1>(?!test).{,4}|.{,4}(?<!<ex=1>)test/).map do |msg|
  "<ex=1>test expected, #{msg} got"
end.join(', ')

Мы просматриваем строку либо на <ex=1>, а не на test или наоборот.Кроме того, мы получаем до 4 символов, которые нарушают правило, для более информативного сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...