0

私のレールモデルには、ある種のテンプレートシステムがあります。編集するユーザーが偶発的な間違いを犯さないようにしたいので、いくつかの単純なバリデーターを使用します。

##user_id##彼らは後で置き換えられるようなマーカーを使用できます。###user_id##が多すぎるようなものを入力しないようにしたい#ので、フィールドに###(または####) を入力してはいけません。

class Template
  validates_format_of :text, :with => /##user_id##/, 
    :message => "##user_id## must be present"
  validates_format_of :text, :not_with => /###/, 
    :message => "Too many #"
end

残念ながら:not_withオプションはありません...-regexを使用して解決する機会はありますか、それとも:with別のvalidate方法を使用する必要がありますか?

私はいくつかの否定的な先読みを試みましたが、(ほとんど) いくつか##あり、1 つしかない###ため、それらは常にそれらの 1 つと一致します。

4

3 に答える 3

1

これはどうですか...

validates_format_of :text, :with => /(^|[^#])##user_id##($|[^#])/

編集: acheong87 のルーブルの例を正規表現でコピーしました。

于 2012-06-26T15:18:05.277 に答える
0

このようなことができますか?

    /^(.(?!###+user_id##|##user_id###+))*$/

ライブ デモは次のとおりです: http://rubular.com/r/SPwsyDlj0y

(もっと)英語で、それは言います、

###+user_id##またはが続く文字がない文字列##user_id###+

于 2012-06-26T15:18:51.070 に答える