2

「新しい」ビューの特定のフィールドで、ユーザーが常に次のような文字列を入力できるRailsアプリがあります。

1303031110012015¿999999999999999

(磁気カードリーダーを介して取得した会員カードの番号であるため)

私がやりたいのは、そのフィールドの正規表現を使用してモデルで検証を行うことです。これにより、次のように、「¿」の前の数字のみをキャプチャできます。

(モデル内):

validates_format_of :card_id, :with => /regex/i

そして、ユーザーがすべてを入力したかどうかに関係なく(マシンは常に入力するため)、データベースにのみ保存した​​いと思います。

1303031110012015

どうすればそれを達成できますか?使用する正しい正規表現はどれですか?

4

1 に答える 1

1

検証では、データが有効であることを確認しますが、クリーンアップは行いません。検証される前に、before_validationコールバックでクリーンアップする必要があります。このようなもの:

before_validation :clean_up_card_id, :if => :card_id_changed?

#...

private

def clean_up_card_id
    self.card_id = self.card_id.to_s.scan(/^\d+/)[0]
end    

次に、あなたは適切に妄想的であり、誰もが本当に外に出ようとしていることを知っているので、それも検証します。

validates :card_id, :format => { :with => /\A\d+\z/, :msg => 'It done broke!' }

そして、それがどれくらいの長さであるかがわかっている場合は、それも検証します(正規表現のを適切な制限に置き換えるか、:lengthまたは置き換えることによって)。+{m,n}

于 2012-11-14T03:32:37.847 に答える