2

Ruby 1.9.3 で Rails 4.0 を使用しています。2 つの異なるフィールドを検証するための 2 つの REGEX があります。

PRICE_REGEX = /[0-9]+/
VALID_REGEX = /[a-zA-z0-9]*/

validates :price, presence: true, format: { with: PRICE_REGEX }
validates :title, length: { maximum: 20 }, format: { with: VALID_REGEX } #not a required field.

私のフォームでは、form_for を使用しており、これらのフィールドは次のように表されています。

<li>
  <div class="msglabel">Price:</div>
  <%= f.text_field :price, class:"textArea" %>
</li>
<li>
  <div class="msglabel">Title:</div>
  <%= f.text_field :title, class:"textArea" %>
</li>

残念ながら、これらはどちらも機能していません。どちらのフィールドにも任意の ASCII 文字を入力でき、彼らはそれらを受け入れます。VALID_REGEX は、使用すると機能します

VALID_REGEX = /[a-zA-z0-9]+/

しかし、空のフィールドは受け入れられません。必須ではないため、必要です。

私は何を間違っていますか?どうすれば修正できますか?

編集

\A および \z アンカーを正規表現に追加しました。

PRICE_REGEX = /\A[0-9]+\z/
VALID_REGEX = /\A[a-zA-Z0-9]*\z/

したがって、VALID_REGEX は機能していますが、PRICE_REGEX は 5000 などの適切な入力を受け入れることさえできません。Rubular 経由でテストしましたが、完全に機能しますが、アプリケーションは入力をまったく受け入れません。

4

1 に答える 1