如何在Ruby中验证只包含特定alpha字符的字符串?

如何在Ruby中验证只包含特定alpha字符的字符串?,ruby,Ruby,我试图确定输入字符串是否只包含字符G、C、T或A。提供的字符串可以包含任意数量的字符,顺序可以任意。如果字符串包含除指定字符以外的任何字符,我应返回“” 我见过几种解决方案,其中我可以验证字符串只包含数字或字母,但如何在执行代码块之前验证字符串只包含特定的alpha字符 例如: 输入_1=“C” 结果_1=运行代码块 输入_2=“acgtxxxctaa” 结果_2=不运行代码块 您可以使用正则表达式进行检查-类似 puts 'run code' if 'C' =~ /^[GCTA]+$/ 其

我试图确定输入字符串是否只包含字符G、C、T或A。提供的字符串可以包含任意数量的字符,顺序可以任意。如果字符串包含除指定字符以外的任何字符,我应返回“”

我见过几种解决方案,其中我可以验证字符串只包含数字或字母,但如何在执行代码块之前验证字符串只包含特定的alpha字符

例如:

  • 输入_1=“C”
  • 结果_1=运行代码块
  • 输入_2=“acgtxxxctaa”
  • 结果_2=不运行代码块

您可以使用正则表达式进行检查-类似

puts 'run code' if 'C' =~ /^[GCTA]+$/
其中:

^  = start of line 
$  = end of line
[] = match any character within 
+  = one or more of previous 

这可能是您正在寻找的解决方案

"C".match(/^[GCTA]+$/) => #<MatchData "C">
"ACGTXXXCTTAA".match(/^[GCTA]+$/) => nil
“C”。匹配(/^[GCTA]+$/)=>#
“acgtxxxctaa”。匹配(/^[GCTA]+$/)=>nil
带正则表达式 它表示从字符串开头到结尾的任何
连续的“G”、“C”、“T”或“A”

如果可以接受空字符串,则可以使用
/\A[GCTA]*\z/

使用字符串#delete 您还可以使用删除每个“G”、“C”、“T”和“A”,并检查字符串是否变为空:

"C".delete("GCTA").empty? #=> true
"ACGTXXXCTTAA".delete("GCTA").empty? #=> false
"ACGTCTTAA".delete("GCTA").empty? #=> true
"".delete("GCTA").empty? #=> true
非regexp答案:

nucleic_acid_sequence = ['G','C','T','A']

test_input = 'GFWG'

unless (test_input.chars-nucleic_acid_sequence).any?
  puts 'valid input!'
end

请坐飞机。你试过什么?我不知道ruby,但因为它不被认为是一种深奥的语言,如果你对你正在做的事情有任何线索,这应该很简单。那么“ACGTXXX\nCTTAA”呢?那么最好使用“ACGTXXX\nCTTAA”。match(/\A[GCTA]+\z/)编辑的答案允许多个字符当没有匹配时,此返回
nil
,这可能是个好主意,即使OP要求在没有匹配项时返回空字符串。
nucleic_acid_sequence = ['G','C','T','A']

test_input = 'GFWG'

unless (test_input.chars-nucleic_acid_sequence).any?
  puts 'valid input!'
end