我在rails应用程序中构建了一个自定义验证器,确保地址格式如下:
收件人姓名:
地址第1行:
地址第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个字符。
答案 0 :(得分:5)
/x
自由空间修改器允许您在多行上使用正则表达式,例如
address !~ /^Recipient Name:(.*)$\n
^Address Line 1:(.*)$\n
(^Address Line 2:(.*)$\n)?
^City:(.*)$\n
^State:(.*)$\n
^ZIP Code:(.*)$/x
答案 1 :(得分:1)
我希望“Free-Spacing Regular Expressions”可以帮到你!
对于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选项启用自由间隔模式。模式中的文字空格被忽略,octothorpe(#)字符引入注释直到行尾。这允许以可能更易读的方式组织模式的组件。
注意:要匹配x模式中的空格,请使用转义符,例如\ s或\ p {Space}。