2010-07-20 54 views
0

嘿,夥計們一個自定義的驗證,我想這將是相當簡單的,但它不是seems..maybe我只是寫語法錯誤..製作與regex..not觸發尚未

在我的模型我正在檢查某些關鍵字

before_validation :deal_validation 

def deal_validation 
    if self.description.match /(exp\s|expire|ex\s|print|mention|\/)/ 
    errors.add(:description, "Now just a second! You can't use those words!") 
    end  
end 

但它似乎並沒有停止保存模型。

我錯過了什麼嗎?

回答

1

改成了

驗證:deal_validation

作品!

+0

是的 - 你只是告訴它運行BEFORE驗證功能。這實際上並未影響驗證。 – jasonpgignac 2010-07-20 17:09:28

0

我真的不知道紅寶石,但使用rubular測試,它似乎像你想:

(\bexpire\b|\bexp?\b|\bprint\b|\bmention\b|\b\/\b) 

的\ B個字符匹配單詞邊界。正如所寫的,你的正則表達式將匹配任何「/」,以及像「正則表達式」的字符串。那真的是你想要的嗎?

編輯使用「?」稍微改進它,量詞,它同時匹配 「EXP」 和 「EX」

+1

小心:將'\ b'放在非單詞字符(斜線)的周圍意味着它只有在斜槓直接被單詞字符i包圍時才匹配。即斜槓將在'a/b'中匹配,但不在'a/b'和'/'中匹配。 – 2010-07-20 16:51:52

+0

謝謝,但我的正則表達式的作品都是一樣的。這些東西不能處理被調用的錯誤或永遠不會執行的驗證。 – Trip 2010-07-20 16:52:31

+0

謝謝蒂姆,我不知道! – 2010-07-20 17:02:31