特定格式的有效文本文件

时间:2015-04-16 07:31:54

标签: ruby regex

我正在阅读上传文件中的内容并将该内容写入另一个文件。现在我想验证使用正则表达式或任何其他方法上传的文件的文本。

我上传的文件包含以下文字:

ABC, A.B.C., A.B.C
Setoff, Set off
and, &

现在我想验证上面的文字,所以我想如果有多个单词存在,则应用逗号分隔,逗号后需要一个空格,后面的单词不存在逗号而不是任何空格。

1 个答案:

答案 0 :(得分:2)

我知道有一个诱惑(部分是因为这个问题用它来标记)用一个大的正则表达式来解决这个问题,但是我部分地将验证的每个部分分解为一个简单的规则,然后检查每个部分分开。它不仅更容易测试而且不会出错(正则表达式很容易出错),这意味着您可以向用户发回更好的错误消息。您还可以在需要时添加/删除规则。

我也喜欢使用throw catch,因为它不是例外,因为它无效。

# Using StringIO for convenience
s = StringIO.new <<MYFAKEFILE
ABC, A.B.C., A.B.C
Setoff, Set off
and, &
MYFAKEFILE

invalid_results = catch(:invalid_file){
  s.readlines.each do |line|
    throw(:invalid_file, "The words in '#{line}' are not separated by a comma followed by a space") unless line.include? ", "
    throw(:invalid_file, "The line '#{line}' ends with a comma") if line.match /,\s*$/
  end
  false # it passes validation
}

if invalid_results
  puts "File failed validation: #{result}"
  # you would handle this with an error message to the uploader      
end