2013-07-23 33 views
2

我正在使用Rails 4.0和Ruby 1.9.3。我有驗證兩個不同的所在領域的兩個REGEXs:REGEX驗證無法在Rails 4上工作

PRICE_REGEX = /[0-9]+/ 
VALID_REGEX = /[a-zA-z0-9]*/ 

validates :price, presence: true, format: { with: PRICE_REGEX } 
validates :title, length: { maximum: 20 }, format: { with: VALID_REGEX } #not a required field. 

在我的形式,我使用的form_for並有表示爲這些領域:

<li> 
    <div class="msglabel">Price:</div> 
    <%= f.text_field :price, class:"textArea" %> 
</li> 
<li> 
    <div class="msglabel">Title:</div> 
    <%= f.text_field :title, class:"textArea" %> 
</li> 

不幸的是,這些都是工作。我可以在任何一個字段中輸入任何ASCII字符,他們會接受它們。該VALID_REGEX的作品,當我使用

VALID_REGEX = /[a-zA-z0-9]+/ 

但隨後它不會接受一個空場,這是我需要它,因爲它不是必需的。

我在做什麼錯,我該如何糾正它?

編輯

我已經添加了\ A和\ Z ^錨的正則表達式:

PRICE_REGEX = /\A[0-9]+\z/ 
VALID_REGEX = /\A[a-zA-Z0-9]*\z/ 

所以VALID_REGEX是工作,但PRICE_REGEX甚至不會現正接受適當的投入,如5000.我已經通過Rubular進行了測試,它完美地工作,但我的應用程序根本不會接受任何輸入。

回答

4

我猜你缺少\A(字符串開頭),\z(字符串結束)

PRICE_REGEX = /\A[0-9]+\z/ 
VALID_REGEX = /\A[a-zA-Z0-9]*\z/ 

沒有\A\z它可以在Hello! Hi這將匹配的情況下在中間的任何地方匹配如..隨着\A\z你會明確地從開始到結束字符串匹配,而不在任何地方匹配

之間

請參考docs

+0

試了錨。當我嘗試加載頁面時,Rails發出了這個錯誤: 「提供的正則表達式使用多行錨(^或$),這可能會帶來安全風險。是否使用\ A和\ z或忘記添加:multiline => true選項?「 – adnann

+0

@ user2567161跟那個建議一起去..編輯 – Anirudha

+0

明白了!將^和$替換爲\ A和\ z作爲指定的錯誤,現在可以工作。謝謝! – adnann