Rails在字段之前和之后剥离空格

时间:2014-09-17 16:12:03

标签: ruby regex ruby-on-rails-3 strip

我有一个Rails 3.2.14应用程序,我通过典型的表单收集数据值。有些时候,工作人员会进入名称为“Doe,John”的字段,其格式应为“Doe,John”。或者在其他情况下,他们可以在表格中添加地址,例如“111 W. 8th St Houston,TX 77448”而不是“111 W. 8th St St Houston,TX 77448”。

所以基本上他们做了很多切割和粘贴,有时包括前导和尾随空格。

我对strip有些熟悉,但我不确定现在我只能删除前导和尾随空格。

我想将此作为验证或回调before_save或before_create过滤器。

如果有人对如何剥离前导/尾随空格以及验证或方法看起来有什么建议我会很感激。

3 个答案:

答案 0 :(得分:2)

查看attribute_normalizer

您可以非常轻松地将其用作以下内容

class User < ActiveRecord::Base

  normalize_attribute :first_name, :with => :strip

end

此外,还有其他一些选项,如布尔值,电话号码或手机

您可以将标准化程序用作多个属性

class User < ActiveRecord::Base

  normalize_attribute :first_name, :last_name, :email, :with => :strip

end

这个语法非常干净。

编辑:

attribute_normalizer还提供了更多选项

  • :squish =&gt;与squish
  • 相同
  • :phone =&gt;删除非数字

您还可以在应用程序中定义custom规范化器

答案 1 :(得分:0)

您可以使用strip。正如文档所说:

strip → new_str
Returns a copy of str with leading and trailing whitespace removed.

"    hello    ".strip   #=> "hello"
"\tgoodbye\r\n".strip   #=> "goodbye"

所以,strip可以帮助你。

但是,如果您想使用正则表达式来执行此操作。你可以使用:

^\s*|\s*$

<强> Working demo

enter image description here

所以,你的代码可能是:

str.gsub!(/^\s*|\s*$/, '')

答案 2 :(得分:0)

StripAttributes Gem

这就是您正在寻找的无障碍,安全的领先和训练空白条带。

基本用法

  1. 将gem安装到Gemfile

    gem 'strip_attributes', '1.8.0'  # Strips leading and trailing whitespaces in form input.
    
  2. 将其添加到您接受来自用户的表单(或API)输入的任何模型中:

    class YourModel < ActiveRecord::Base
    
      strip_attributes
    
    end
    

    ProTip:如果您有其他模型继承的Base类,请将其放在那里。

  3. 默认情况下,这将从所有属性中删除所有前导和训练空白。您还可以使用其他选项来限制应用的属性以及单词之间的多个空格是否会折叠到单个空格中等。

    但是,默认是非常好并且非常安全。我发现这比需要您指定要删除哪些属性的替代方法更好。通常,您要删除所有属性。