2009-07-16 15 views
9

ユーザを検証したいので、ユーザ名でa-zと - のみ使用できます。検証:文字、数字、 -

validates_format_of :username, :with => /[a-z]/ 

しかし、このルールはまた

Username should use only letters, numbers, spaces, and [email protected] please. 

@スペース._に任意のアイデアを可能に?

よろしくお願いいたします。 ロンヴィグモレル

+0

これは私が思いついたものです=>/^と[ - AZ \ D _] + $/ – atmorell

+0

あなたは答えを持っている場合あなたの問題を解決するなら、あなたはそれを受け入れられたものとしてマークするべきです。 –

答えて

3

[] [-Z0-9]は小文字と数字

特殊文字を与えるように、いくつかの「ルール」を含んでよい - ルール

んの開始時に行かなければなりません

[[email protected]_.] 

効果を与えますか?

+0

[-A-Za-z0-9]。] < - 大文字で、ちょうどの場合。 – beggs

+0

彼はa-zを要求しました;-) – djna

+0

私はむしろ大文字小文字を区別しないようにマークしたいと思います。 – Svish

16

あなたは、文字列全体が一致しなければならないと言う必要があるかもしれません:

validates_format_of :username, :with => /^[-a-z]+$/ 

あなたがで改行と一致しない場合にも、\ Aと^置き換えると\ Zと$する必要があるかもしれません始まりと終わり。 (thanks to BaroqueBobcat

iを追加すると、大文字と小文字を区別しないで一致させます。 (Omar Qureshiのおかげで)。

(私ももともと+をオフに左:Chuckのおかげで)

+5

は大文字小文字を区別しないために/^[ - a-z] $/iとして同意します –

+0

例は常に無効を返します:/ – atmorell

+0

irb .. re =/^ [ - a-z] $/i; "foo" =〜re –

0

は、単に(\wは、すべての英数字カバー - 文字と数字 - とアンダースコアを)すべての文字をあなた仕様の状態と一致する正規表現を変更。

validates_format_of :username, :with => /[\w \.\[email protected]]+/ 
+0

あなたの例はかなり近いですが、ユーザーは引き続き使用できます。スペース。私の.......新規ユーザー – atmorell

+0

長い文字列の一致を防ぐために、ここには制限はありません。これは、一致した文字の少なくとも1つを含む文字列と一致します。 –

1
validates_format_of :username, :with => /^[\w\[email protected]]*$/ 

注*「0以上の」

+0

同じ問題...スペースと。まだ許可されています:/ – atmorell

9

より複雑なソリューションが、再利用可能な、よりきめの細かいエラーメッセージとを意味します。

カスタムバリデータ: -

アプリ/バリ/ username_convention_validator.rb

class UsernameConventionValidator < ActiveModel::EachValidator 
    def validate_each(record, field, value) 
    unless value.blank? 
     record.errors[field] << "is not alphanumeric (letters, numbers, underscores or periods)" unless value =~ /^[[:alnum:]._-]+$/ 
     record.errors[field] << "should start with a letter" unless value[0] =~ /[A-Za-z]/ 
     record.errors[field] << "contains illegal characters" unless value.ascii_only? 
    end 
    end 
end 

( '_' と完全性のために、非ASCII文字を許可するdoesntのそれは認めていません注意してください)

用途:

ユーザ名:validates_format_of:

アプリ/モデル/ user.rb

validates :name, 
    :presence => true, 
    :uniqueness => true, 
    :username_convention => true 
+1

ニースの答え - それは余分なマイルになります。 –