2012-10-05 16 views
1

我想驗證文本輸入。我注意到,如果文本字段中有空格,它會失敗。Ruby on Rails:除了validates_format_of中的數字之外的任何內容

validates_format_of :role, :with => /\A[a-zA-Z]+\z/, :message => "field should only have letters" 

我需要更改以允許空格?由於

更新:

更改的問題,但任何數字,因爲我需要讓在文本字段中的特殊字符。

+0

這是更的正則表達式問題。你可以允許這樣的空格/ \ A [a-zA-Z _] + \ z /。注意這不是一個解決方案,而是一個指示你如何去做 –

回答

5

只需添加一個空間,你匹配(目前a-zA-Z)的字符。因此

/\A[a-zA-Z ]+\Z/ 

注意\s將匹配任何空白字符(包括製表符和換行符)。

更新

要允許除了數字,你可以使用一個「否定字符類」,它是通過將一個插入符號^在方括號的開始做:

/\A[^0-9]+\Z/ 

或者,由於\d(爲 「數字」)相當於[0-9]

/\A[^\d]+\Z/ 
+0

感謝您的快速回復。我剛剛注意到我實際上需要的只是數字,我會怎麼做呢?因此,A-Z,a-z,\和特殊字符(如(*)和^)。謝謝 – Jazz

+1

沒問題,我已經更新了我的答案。您應該編輯您的問題以反映這一變化。 –

3

Ruby正則表達式支持\s作爲空白字符。所以你應該可以把它添加到你的角色類中。

:with => /\A[a-zA-Z\s]+\z/ 

證明:

/\A[a-zA-Z\s]+\z/ =~ 'hello world' #=> true 
/\A[a-zA-Z]+\z/ =~ 'hello world' #=> false 
+0

感謝您的快速回復。我剛剛注意到我實際上需要的只是數字,我會怎麼做呢?因此,A-Z,a-z,\和特殊字符(如(*)和^)。謝謝 – Jazz

+0

@Alex Wayne爲什麼是\ A需要?以rubular測試這個例子似乎失敗了,例如「test9」。 –

+0

'\ A'只是表示字符串的開始,一個錨點。 ''test9「'會失敗,因爲正則表達式不允許任何數字。 –

相關問題