2009-05-18 8 views
0

検証するためにURLの配列を渡しています。この機能は以下の通りです。 URLは1つだけ渡しますが、複数のURLは渡しません。正規表現が正しいと思われます。どこが間違っていますか?RubyのURLを検証するこの正規表現で何が問題になっていますか?

def check_urls (list) 
    regexp =/(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix  
    list.each do |url| 
     if not regexp.match(url) 
      return false 
     end 
    end 
    return true 
    end 

は、エラーを修正しました。何も間違って正規表現の機能を、ちょうど分割が間違って行われた。

誰もが助けてくれたおかげで。

+0

どのような種類リストにあります? –

+0

関数を呼び出すコード、使用しているサンプル値(例:irb)、エラーの場合は何が起こるのでしょうか(また、irbセッションは素晴らしいでしょう)。 –

+0

文字列の配列 – user61734

答えて

2

はあなたが正規表現に対してそれを一致させる前に、各URLを検査してみてください。

def check_urls (list) 
    regexp =/(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix   
    list.all? do |url| 
    p url # see what URL is getting inspected 
    regexp =~ url # make sure it matches the regexp 
    end 
end 

これは、あなたがそれに一致しないURLを見つける必要があり、あなたがそこから作業することができます。

1

多分、あなたはurisを解析してエラーで中止することができます。

def check_urls(list = []) 
    list.to_a.all? do |uri_string| 
    uri = URI.parse(uri_string) rescue nil 
    uri && uri.scheme == "http" 
    end 
end 

Enumerable#allURI.parse

0

チェックアウトRubularにもドキュメントを参照してください。多くの場合、私を助けてくれた素晴らしいツールです。

0

ok、probを見つけました。 私はこの

user_input.split(「\ r \ nの」)、これは間違っているよう

が見えるように文字列を分割しようとしています、それは機能がより多くの1つの値に対して正しく動作していない理由であります配列は常に

0

この方法:-(入力文字列がある1つの文字列を、ない含まれているため、一つの値、何を求めている またStringクラス内で次のようになります。データの

def linkify text 
    text.gsub!(/\b((https?:\/\/|ftps?:\/\/|mailto:|www\.)([A-Za-z0-9\-_=%&@\?\.\/]+))\b/) { 
    match = $1 
    tail = $3 
    case match 
    when /^www/  then "<a href=\"http://#{match}\">Link</a>" 
    when /^mailto/ then "<a href=\"#{match}\">Link</a>" 
    else     "<a href=\"#{match}\">Link</a>" 
    end 
    } 
    text 
end