我正在开发一个Rails 3应用程序,其中包含几个包含下拉选择的表单。选择中显示的选项应该可供应用程序的管理员配置。
管理员可以在文本区域中输入选项。文本区域中的每个新行都定义了要在选择中显示的内容。
A - Option 1
B - Option 2
C - Option 3
现在,棘手的部分是验证管理员在选项中输入的内容。 每个选项行应遵循某种模式,其中第一部分(连字符之前)是选项的键,第二部分(连字符之后)是一些解释。
我目前正在使用以下正则表达式来验证每一行:
(.+) *- *(.+)
现在我想同时验证多行。 上面的示例应该有效,而以下内容应该无效:
示例1:
A - Option 1
B - Option 2
C
示例2:
A - Option 1
B - Option 2
- Option 3
我在正则表达式中添加了分隔符以匹配行(即:(^(。+)* - *(。+)$)+),但它没有按预期工作。
答案 0 :(得分:0)
使用/\A(^\w+ *- *\w.+\n)+\z/
作为正则表达式。
def validate(options)
options =~ /\A(^\w+ *- *\w.+\n)+\z/
end
示例:
validate(<<EOF)
A - Option 1
B - Option 2
C - Option 3
EOF
# => 0
validate(<<EOF)
A - Option 1
B - Option 2
C
EOF
# => nil
validate(<<EOF)
A - Option 1
B - Option 2
- Option 3
EOF
# => nil
validate(<<EOF)
- Option 1
B - Option 2
C - Option 3
EOF
# => nil
validate(<<EOF)
A -
B - Option 2
C - Option 3
EOF
# => nil
validate(<<EOF)
EOF
# => nil