我正在阅读上传文件中的内容并将该内容写入另一个文件。现在我想验证使用正则表达式或任何其他方法上传的文件的文本。
我上传的文件包含以下文字:
ABC, A.B.C., A.B.C
Setoff, Set off
and, &
现在我想验证上面的文字,所以我想如果有多个单词存在,则应用逗号分隔,逗号后需要一个空格,后面的单词不存在逗号而不是任何空格。
答案 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