2013-10-16 140 views
3

我已經建立在我的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

爲什麼要捕獲'(。*)'?除非你要對捕獲的文本做些什麼,否則這是不必要的。另外,如果你有嵌入的'\ n',則不需要中間'$'和後面的'^'。你可以做線路終點/線路終點錨點,或者'\ n',但不需要兩個。 –

回答

3

這個/x freespace修飾符允許你在多行上有正則表達式,

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

謝謝。這正是我所需要的。美麗的解 – user2574255

0

我希望「Free-Spacing Regular Expressions」可以幫到你!

對於紅寶石具體地,檢查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}等轉義符。