2

我正在使用带有 Ruby 1.9.3 的 Rails 4.0。我有两个用于验证两个不同字段的正则表达式:

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

4

我猜你错过了\A(字符串的开头),\z(字符串的结尾)

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

没有\A\z它可以匹配中间的任何位置,就像匹配的情况一样。Hello! Hi如果使用\A\z您将从字符串的开头到结尾显式匹配,而不匹配中间的任何位置


参考文档中的锚点

于 2013-07-23T06:20:20.917 回答