2011-01-28 18 views
17

私はMechanizeを使用していくつかのWebページとやり取りしています。 文字列に文字列が含まれているかどうかを確認する

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

が面倒でしたregexesをエスケープして解決策を書く)))+1 –

10

は、1つの正規表現パスでそれを行う:

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

あなたは特別な正規表現の文字を含むすべてのエラーメッセージを逃れることを確認する必要があります。それは、保守にするには:あなたがをテストし、Nakilonの答えの速度はしかし、十分ではありません発見した場合

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

にのみ、これを使用する必要があります。 :)

+1

と怠惰 – Nakilon

+1

正規表現のエスケープを簡略化する:ここのコメントから 'Regexp.union(* error_messages)'を実行するhttp://stackoverflow.com/questions/10215590/check-if-string-contains -any-substring-in-array-in-ruby#comment13121626_10215848 – Phil

関連する問題