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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails在字段StripAttributes Gem之前和之后剥离空格相关的知识,希望对你有一定的参考价值。

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

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

我对strip有点熟悉,但我不确定现在我只能剥离前导空格和尾随空格。

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

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

答案

看看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 =>和squish一样
  • :phone =>删除非数字

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

另一答案

你可以使用strip。正如文件所说:

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

"    hello    ".strip   #=> "hello"
"	goodbye
".strip   #=> "goodbye"

所以,strip应该帮助你。

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

^s*|s*$

Working demo

所以,你的代码可能是:

str.gsub!(/^s*|s*$/, '')
另一答案

StripAttributes Gem

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

Basic Usage

  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类,请将其放入其中。

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

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

以上是关于Rails在字段StripAttributes Gem之前和之后剥离空格的主要内容,如果未能解决你的问题,请参考以下文章

将类属性添加到密码字段在 Rails 中不起作用

rails g mongoid:配置不工作 Rails 6.1

Ruby on Rails - rails g 脚手架外键

Rails 4:如何在 Rails 中使用 JQuery 禁用基于复选框值的文本字段

如何在表单中编辑 Rails 序列化字段?

如何在 Rails 验证错误中突出显示字段