2014-12-04 45 views
1

有沒有辦法來檢查一個字符串是否只包含非法字符?如果有其他東西,這些角色不是非法的,但如果他們是他們自己,他們是非法的。紅寶石 - 檢查字符串是否只包含特定的字符和無效的模型

例如:

illegal_characters = ['$', '^', '\\'] 

所以

'$'    # bad 
'^^$^$^^\\\\^\\$' # bad 
'$oh hey there' # good 

有沒有辦法來檢查是什麼?

+0

「不是非法的,如果別的有沒有」,你只是意味着一個字母' A-ZA-Z'? – Anthony 2014-12-04 20:52:44

+0

'\\'不是一個字符,它是一個字符串。那麼你想讓'\\'成爲合法嗎? – 2014-12-04 20:57:02

+0

@ RustamA.Gasanov我只是舉了一個例子。我想「違法」,但我想我必須逃避它? – Jeff 2014-12-04 21:00:15

回答

5

你沒有這個標記軌道,但是你確實說無效模型...所以...

validates_format_of :myfield, without: /\A[$^\\]+\z/ 

注意它的without,不with。所以你說如果myfield只包含那些字符,然後失敗。

如果它不是軌道,該正則表達式仍然會做你想要的。

+0

添加標籤作爲更新。 – Jeff 2014-12-04 20:58:14

+1

@Jeff這是'驗證:my_field格式:{無:正則表達式}'用新的語法。 – 2014-12-04 21:10:00

+0

太棒了。這很好。如果需要,是否有添加消息的方法? – Jeff 2014-12-04 21:20:12

0

這不是優雅,也許有人可以提供更好的答案,但這將工作。

illegal_strings = ['$', '^', '\\'] 
valid_string = Proc.new{ |s| !s.chars.all?{ |a| illegal_strings.include?(a) } } 
# OR 
# valid_string = Proc.new{ |s| !s.gsub(/[$^\\]/,'').empty?} 
valid_string.call('$') 
#=> false 
valid_string.call('^^$^$^^\\\\^\\$') 
#=> false 
valid_string.call('$oh hey there') 
#=> true 

如果這是Rails的那麼菲利普的回答是比較合適的

0

你可以這樣做:由

BADDIES = '$^\\' 

def all_good?(str) 
    str.delete(BADDIES).size > 0 
end 

all_good? '$'    # false 
all_good? '^^$^$^^\\\\^\\$' # false 
all_good? '$oh hey there' # true 
all_good? 'oh hey there' # true 
相關問題