2011-01-28 16 views
17

Używam Mechanize do interakcji z kilkoma stronami internetowymi i próbuję ustalić, czy dane podanie formularza spowodowało błąd.Ustal, czy ciąg zawiera którykolwiek z zestawu ciągów znaków

Teraz robię to:

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

Ale właśnie odkrył kolejna wiadomość błąd. Ponieważ nie chcę zrobić:

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

Jak mogę określić, czy ciało strona zawiera albo komunikat o błędzie?

Odpowiedz

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

Z, oczywiście: 'error_messages = [ "Jestem komunikat o błędzie!", "Kolejny komunikat o błędzie"]' – Phrogz

+0

byłem zbyt leniwy ponownie))) – Nakilon

+0

jasny i zwięzły, niesamowite –

10

Alternatywnie, zrób to w jednym przejściu Regex:

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

Musisz upewnić się, że można uciec żadnych komunikatów o błędach, które zawierają znaki specjalne regex. Aby zrobić to w utrzymaniu:

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

Należy używać tylko tego, jeśli przetestowaniu i znalazł szybkość odpowiedzi Nakilon nie wystarczy jednak. :)

+1

I zbyt leniwy pisać rozwiązanie z wyrażeń regularnych))) +1 – Nakilon

+1

Upraszczanie wyrażeń regularnych: 'Regexp.union (* error_messages)' z komentarza tutaj http://stackoverflow.com/questions/10215590/check-if-string-contains -ny-substring-in-an-array-in-ruby # comment13121626_10215848 – Phil

Powiązane problemy