如何以更好的方式生成字符串并检查是否包含不允许的字符

时间:2014-05-26 05:52:40

标签: ruby regex

如何以更好的方式生成字符串并检查是否包含不允许的字符

有效的字符规则是

  

" AZ,az,0-9,!,#,$,%, - ,。,@,^,_,〜,\,/,;,:,?,{,[,] ,},`,*,),(+,|"

我想使用规则生成"有效"字符串和"无效"字符串

如何检查字符串是否包含规则之外的任何字符? 如果字符串包含规则之外的任何字符,则应返回false。

用于生成"有效"字符串

这是我的想法

创建一个包含每个有效字符的列表,然后调用sample方法生成有效字符串。

但是如何生成一个字符串包含无效字符并检查字符串是否无效?

由于

1 个答案:

答案 0 :(得分:0)

您可以通过创建有效字符数组来创建有效字符串,然后使用它来对字符串中的字符进行采样:

VALID_CHARACTERS = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a  + %w<! # $ % - . @  ^ _ ~ \\ / ; : ? { [ ] } ` * ) ( + |>

def create_valid_string(length)
  length.times.map { VALID_CHARACTERS.sample }.join
end

create_valid_string(12)
# => "w?r~@f:+vl1r"

要检查字符串是否有效,您应确保其所有字符都包含在有效字符中:

def string_valid?(string)
  string.chars.all? { |c| VALID_CHARACTERS.include? c }
end

string_valid? "w?r~@f:+vl1r"
# => true

string_valid? "w?r~@ f:+vl1r"
# => false

要创建无效字符串,您需要...添加不在有效字符中的字符吗?

SOME_INVALID_CHARACTERS = [',', ' ']

def create_invalid_string(length)
  invalid_characters = (1...length).to_a.sample.times.map { SOME_INVALID_CHARACTERS.sample }
  valid_characters = create_valid_string(length - invalid_characters.length).chars
  (invalid_characters + valid_characters).shuffle.join
end

create_invalid_string(12)
# => "UZ*rT6T,![H,"