Ruby - 检查字符串是否只包含特定的字符和无效的模型

时间:2014-12-04 20:47:43

标签: ruby-on-rails ruby regex

有没有办法检查字符串是否只包含非法字符?如果有其他任何东西,这些字符不是非法的,但如果它们本身就是非法的。

例如:

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

所以

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

有没有办法检查?

3 个答案:

答案 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