2012-06-09 8 views
18

私のアプリではクォートの仕組みに取り組んでいます。その話題のコメント26を引用するために。
最初に1つ以上のコメントを引用するかどうかを確認するには、current_user.comments.buildとbefore @ comment.saveの後にif条件を付けます。
しかし、ちょうど適応するために、私の質問はもう少し一般的かつ容易にするために:Rails 3 - コントローラ内の正規表現を使って文字列/テキストに単語/文字が含まれていないか確認する

if @comment.content.include?(/\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i) 

私はこのような何かをしたいです。この例は、コメントの内容に電子メールが含まれているかどうかを確認するためのものです。しかし、論理的に私は "正規表現を文字列に変換できません"というエラーが出ます。

どのようにインクルードを行うことができますか? regexpを持つレールのメソッド?だから、テキストにある正規表現形式の文字列が含まれているかどうかをチェックするには?

コントローラがそのような正規表現アクションの間違った場所ですか?

答えて

44

私はルビーがこのようにregex'esん:あなたはすべての以前のコメント@prev_commentsの配列を持っていたし、ワンショットでそれらすべてを交換したい場合は

stringObj.match(/regex/) 
8

if @comment.content =~ /regex/ 

もあります、あなたはできます

pattern = /#(\d+)/ 

@comment.content.gsub(pattern) do 
    cur_match = Regexp.last_match 
    idx = cur_match[1].to_i - 1 
    @prev_comments[idx] 
end 

トリックは、それならば、私は不思議作られ、現在の一致を得るためにRegexp.last_matchを使用していますスレッドセーフです。それは明らかにisです。

以下、より一般的な文字列の拡張子から適応

(盗まれた)

class String 
    def js_replace(pattern, &block) 
    gsub(pattern) do |_| 
     md = Regexp.last_match 
     args = [md.to_s, md.captures, md.begin(0), self].flatten 
     block.call(*args) 
    end 
    end 
end 

出典:http://vemod.net/string-js_replace

3

.INCLUDEの性質を一致させるには?あなたがRailsの(またはactivesupportの)を使用している場合

stringObj.match(/regex/).present? 

は同様の真/偽の結果を与えるだろう

+0

Rubyのマッチオブジェクトは 'プレゼントを持っていないのですか?'。 – thundergolfer

+0

現在の機能を利用するには、RailsまたはActiveSupportを使用する必要があることに注意するように更新されましたか? – Carpela

関連する問題