2011-01-28 2 views
17

Я использую Mechanize для взаимодействия с несколькими веб-страницами, и я пытаюсь определить, привело ли сообщение к данной форме сообщение об ошибке.Определить, содержит ли строка какой-либо набор строк

Прямо сейчас я делаю это:

agent.page.body.include?("I'm an error message!") 

Но я только что обнаружил другое сообщение ошибки. Так как я не хочу делать:

agent.page.body.include?("I'm an error message!") || agent.page.body.include?("Another error message") 

Как я могу определить, содержит ли тело страницы либо сообщение об ошибке?

ответ

23
error_messages.any? { |mes| agent.page.body.include? mes } 
+4

С, конечно: 'error_messages = [«Я сообщение об ошибке!»,«Другое сообщение об ошибке»]' – Phrogz

+0

я был слишком ленив, опять же))) – Nakilon

+0

Четкий и лаконичный, удивительным –

10

С другой стороны, сделать это в один Regex проход:

error_messages = /I'm an error message!|Another error message/ 
if agent.page.body =~ error_messages 
    ... 
end 

Вы должны убедиться, что вам избежать каких-либо сообщений об ошибках, которые содержат специальные символы регулярных выражений. Для того, чтобы сделать его ремонтопригодны:

if agent.page.body =~ Regexp.union("foo", "bar", "jim.bob", "jam|jam") 
    ... 
end 

Вы должны использовать только если вы испытали и нашел скорость ответа Nakilon не достаточно, однако. :)

+1

И лень написать решение с помощью regexes escaping))) +1 – Nakilon

+1

Упрощение вытеснения регулярных выражений: 'Regexp.union (* error_messages)' из комментария здесь http://stackoverflow.com/questions/10215590/check-if-string-contains -люба-подстрока-в-в-массив-в-рубиновый # comment13121626_10215848 – Phil

Смежные вопросы