2013-11-02 88 views
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 

我已經加入定界符以匹配線(即:(^(。+)* - *(。+)$)+),但它不按預期工作。

+0

非常好,良好的格式化的問題(* + 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 
相關問題