2011-08-26 106 views
0

您好我有一個ruby正則表達式,我用usinig Rubular http://rubular.com/r/RRc8twB6NL這意味着要檢查10.00的定價小數。我得到它的Rubular工作,但在我的應用程序的代碼不起作用:正則表達式的Ruby驗證器不能正常工作

validates_format_of :price, :with=>/^([0-9]{1,}\.{0,}[0-9]{0,2})$/ 

感謝所有幫助

+0

您的正則表達式(可以改寫爲/^\d+\.*\d?\d?/)匹配任何由3個或更多數字組成的字符串以及由1個或多個數字組成的字符串,然後是一些點,然後是0到2位數字(實際上包含這樣一行的任何字符串)。這包括「0007」,「0 ....」和其他非價格。你真的想要驗證什麼? –

+0

@undur_gongor我只是想驗證它的格式是價格,例如$ 1.00,$ 10.00,$ 200.00等。 –

回答

1

如果你只想要有一個數字然後零的價格,你需要正則表達式

/\A[1-9]0*\.\d\d\z/ 

如果任何號碼小數點前允許點是

/\A[1-9]\d*\.\d\d\z/ 

如果如果你想允許美元小數部分是可選的它要麼是的

/\A[1-9]0*(\.\d\d)?\z/ 
/\A[1-9]\d*(\.\d\d)?\z/ 

符號(可能與之間的空格)它可以是

/\A(\$\s*)?[1-9]0*\.\d\d\z/ 
/\A(\$\s*)?[1-9]\d*\.\d\d\z/ 
/\A(\$\s*)?[1-9]0*(\.\d\d)?\z/ 
/\A(\$\s*)?[1-9]\d*(\.\d\d)?\z/ 
0

要檢查10.00:

/^10\.00$/ 

要檢查10.00 - 99.99:

/^[1-9]\d\.\d{2}$/