4

我在我的 rails 应用程序中构建了一个自定义验证器,以确保地址格式如下:

收件人姓名:

地址第一行:

地址行 2:

城市:

状态:

邮政编码:

- 或者 -

银行帐号:

银行路由号码:

银行账户类型:

我已经实现了以下辅助方法来检查地址是否与这些模式之一不匹配:

def malformed_check(address)
  address !~ /^Recipient Name:(.*)$\n^Address Line 1:(.*)$\n(^Address Line 2:(.*)$\n)?^City:(.*)$\n^State:(.*)$\n^ZIP Code:(.*)$/
end

def malformed_ach(address)
  address !~ /^Bank Account Number:(.*)$\n^Bank Routing Number:(.*)$\n^Bank Account Type:(.*)$/
end

我的问题是:我怎样才能跨多行打破我的正则表达式?

在我们的编码标准中,每行最多 120 个字符。

4

2 回答 2

5

自由/x空间修饰符允许您在多行上使用正则表达式,例如

address !~ /^Recipient Name:(.*)$\n
            ^Address Line 1:(.*)$\n
           (^Address Line 2:(.*)$\n)?
            ^City:(.*)$\n
            ^State:(.*)$\n
            ^ZIP Code:(.*)$/x
于 2013-10-16T17:40:01.840 回答
1

希望《自由间距正则表达式》能帮到你!

特别是对于 Ruby,请查看Regexp文档,其中说:

正则表达式的结束分隔符后面可以跟一个或多个单字母选项,这些选项控制模式如何匹配。

/pat/i - Ignore case
/pat/m - Treat a newline as a character matched by .
/pat/x - Ignore whitespace and comments in the pattern
/pat/o - Perform #{} interpolation only once

... x 选项启用自由间距模式。模式内的文字空白将被忽略,八字形 (#) 字符引入注释,直到行尾。这允许以可能更易读的方式组织模式的组件。

注意:要匹配 x 模式中的空格,请使用转义符,例如 \s 或 \p{Space}。

于 2013-10-16T17:34:19.350 回答