2012-01-11 54 views
0

我正在使用Ruby on Rails 3.1.0,我想驗證一個類屬性只是爲了避免在數據庫中存儲包含這些字符的字符串:(空白),<>"#%{}|\^~[]和```。正則表達式避免一組字符

什麼是正則表達式?

+0

@ Octopus-Paul:''''會結束字符類,而'\ s'序列在字符類中不起作用。 – porges 2012-01-11 11:51:27

+1

@Porges'\ s'在角色類中工作得很好。 – d11wtq 2012-01-11 11:54:01

+0

@ d11wtq:我更正:) – porges 2012-01-11 11:58:54

回答

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 

Invers Ë表達式爲:

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

使用您的正則表達式它接縫驗證所有字符串... – user502052 2012-01-11 12:04:18

+0

除了我上面的「b」?正則表達式返回壞字符串的真值,好字符返回「nil」,所以你需要反轉邏輯。 – d11wtq 2012-01-11 12:06:36

+0

請注意,有一種'=〜'可用的反轉,即'!〜'。像'b!〜re#=> false'。 – d11wtq 2012-01-11 12:08:36

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

Regexp.union需要逸出的照顧。

+0

+1 for Regexp.union – 2012-01-11 13:37:56