2012-01-11 11 views
0

私はRuby on Rails 3.1.0を使用しています。これらの文字を含む文字列をデータベースに格納しないようにクラス属性を検証したいと考えています。(空白)、<>"#%{}|\^~[]と `` `。文字セットを避けるための正規表現

正規表現とは何ですか?それはまた、非空であるべきと仮定すると、

+0

@ Octopus-Paul: ']'は文字クラスを終了し、 '\ s'シーケンスは文字クラス内では機能しません。 – porges

+1

@Porges '\ s'は文字クラス内でうまく動作します。 – d11wtq

+0

@ d11wtq:訂正されました:) – porges

答えて

3

^[^\] ><"#%{}|\\^~\[`]+$ 

誰かがここでは、これをdownvotingされているので、いくつかのテストコードは次のとおりです。

ary = [' ', '<', '>', '"', '#', '%', '{', '}', '|', '\\', '^', '~', '[', ']', '`', 'a'] 
ary.each do |i| 
    puts i =~ /^[^\] ><"#%{}|\\^~\[`]+$/ 
end 

出力:

nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
nil 
0 
2
a = "foobar" 
b = "foo ` bar" 

re = /[ \^<>"#%\{\}\|\\~\[\]\`]/ 

a =~ re # => nil 
b =~ re # => 3 

逆電子式は次のとおりです。

/\A[^ \^<>"#%\{\}\|\\~\[\]\`]+\Z/ 
+0

正規表現を使用してすべての文字列を検証します。 – user502052

+0

上記の "b"を除きますか?正規表現は不正な文字列に対して真理値を返し、良い文字列に対しては 'nil'を返すので、ロジックを逆にする必要があります。 – d11wtq

+0

利用可能な '=〜'の逆数があり、これは '!〜'です。 'b!〜re#=> false'のように。 – d11wtq

2
bad_chars = %w(< > " # % { } | \^~ [ ] ') 
re = Regexp.union(bad_chars) 
p %q(hoh'oho) =~ re #=> 3 

Regexp.unionは、エスケープの世話をします。

+0

+1 Regexp.union –

関連する問題