如何以更好的方式生成字符串并检查是否包含不允许的字符
有效的字符规则是
" AZ,az,0-9,!,#,$,%, - ,。,@,^,_,〜,\,/,;,:,?,{,[,] ,},`,*,),(+,|"
我想使用规则生成"有效"字符串和"无效"字符串
如何检查字符串是否包含规则之外的任何字符? 如果字符串包含规则之外的任何字符,则应返回false。
用于生成"有效"字符串
这是我的想法
创建一个包含每个有效字符的列表,然后调用sample方法生成有效字符串。
但是如何生成一个字符串包含无效字符并检查字符串是否无效?
由于
答案 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,"