2010-03-18 18 views
3

我想使用validates_format_of驗證逗號分隔的字符串只有字母(小寫字母和數字)和數字。Rails validates_format_of

所以。

例1,例2,22example44,EX24

不是: ^ & *,<>,asfasfsdafas <#%$#

基本上我想有用戶輸入逗號分隔的單詞(包括數字),而不特殊字符。

我將使用它來驗證acts_as_taggable_on中的標記。 (我不希望是例如有效的標籤。

在此先感謝。

回答

0

您可以隨時在rubular上測試正則表達式,您會發現tiftiks和Tims正則表達式都適用於帶有空白的奇怪邊緣案例。

蒂姆的解決方案可以擴展到包括開頭和結尾的空格,然後應該做你想做的,如下所示: -

^\s*[A-Za-z0-9]+(\s*,\s*[A-Za-z0-9]+)*\s*$ 

想必當你確認你將要變成一個輸入字符串迭代標籤數組。你可以這樣做如下: -

array_var = string_var.delete(' ').split(',') 
+0

我似乎錯過了一些東西。如果我拿你的註冊。進出口。並在rubulur測試它工作正常。當我執行以下操作時: validates_format_of:title,:with =>^\ s * [A-Za-z0-9] +(\ s *,\ s * [A-Za-z0-9] +)* \在我的編輯器中出現錯誤(不喜歡它),當我在瀏覽器中運行時出現錯誤: 語法錯誤,意外'^' ... s_format_of:title ,:with =>^\ s * [A-Za-z0-9] +(\ s *,\ s * [A-Za-z ... – user296489 2010-03-18 21:04:53

+1

@squids - 你需要用n來包裝字符// // 'like':with =>/^ \ s * [A-Za-z0-9] +(\ s *,\ s * [A-Za-z0-9] +)* \ s * $ /'so Ruby將其解釋爲正則表達式 – 2010-03-18 23:15:38

0

^([a-zA-Z0-9]+,\s*)*[a-zA-Z0-9]+$

注意,這個表達式不匹配空白值,因此它不會匹配多個如「abc xyz,fgh qwe」,它可以匹配任意數量的逗號後面的空格,如果validates_format_of試圖匹配整個字符串,則可能不需要^或$,我從來不使用Rails,所以我不知道這一點。

+0

嗨, 這樣實際上是由插件處理的相當不錯的標籤。那麼是否有可能只允許普通字符,數字和逗號? (在一個字符串?和正則表達式是什麼?) 上述正則表達式代碼不起作用。這可能是與紅寶石正則表達式語法? – user296489 2010-03-18 13:50:34

0
^[A-Za-z0-9]+([ \t]*,[ \t]*[A-Za-z0-9]+)*$ 

應匹配只包含t的CSV行軟管字符,不管它只是一個值還是很多。