有没有办法检查字符串是否只包含非法字符?如果有其他任何东西,这些字符不是非法的,但如果它们本身就是非法的。
例如:
illegal_characters = ['$', '^', '\\']
所以
'$' # bad
'^^$^$^^\\\\^\\$' # bad
'$oh hey there' # good
有没有办法检查?
答案 0 :(得分:5)
您没有标记此轨道,但您确实说该模型无效......所以......
validates_format_of :myfield, without: /\A[$^\\]+\z/
请注意,它是without
,而不是with
。所以你要说myfield
只包含那些字符然后失败。
如果它不是rails,那么正则表达式仍然可以做你想要的。
答案 1 :(得分: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,那么Philip的回答更合适
答案 2 :(得分: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