2013-07-23 30 views
2

我正在使用Rails 4.0和Ruby 1.9.3。我有验证两个不同的所在领域的两个REGEXs:REGEX验证无法在Rails 4上工作

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

我猜你缺少\A(字符串开头),\z(字符串结束)

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

没有\A\z它可以在Hello! Hi这将匹配的情况下在中间的任何地方匹配如..随着\A\z你会明确地从开始到结束字符串匹配,而不在任何地方匹配

之间

请参考docs

+0

试了锚。当我尝试加载页面时,Rails发出了这个错误: “提供的正则表达式使用多行锚(^或$),这可能会带来安全风险。是否使用\ A和\ z或忘记添加:multiline => true选项?“ – adnann

+0

@ user2567161跟那个建议一起去..编辑 – Anirudha

+0

明白了!将^和$替换为\ A和\ z作为指定的错误,现在可以工作。谢谢! – adnann