2

我正在开发一个 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

我在正则表达式中添加了分隔符以匹配行(即: (^(.+) *- *(.+)$)+ ),但它没有按预期工作。

4

1 回答 1

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
于 2013-11-02T06:45:02.873 回答