Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 删除字段前后空白的Rails_Ruby_Regex_Ruby On Rails 3_Strip - Fatal编程技术网

Ruby 删除字段前后空白的Rails

Ruby 删除字段前后空白的Rails,ruby,regex,ruby-on-rails-3,strip,Ruby,Regex,Ruby On Rails 3,Strip,我有一个Rails 3.2.14应用程序,通过一个典型的表单收集数据值。有时工作人员会输入一个字段,例如名称“Doe,John”,其中的格式应为“Doe,John”。或者在其他情况下,他们可能会在表格中添加地址,例如“德克萨斯州休斯顿西八街111号,邮编77448”,而不是“德克萨斯州休斯顿西八街111号,邮编77448” 所以基本上他们做了大量的剪切和粘贴,有时包括前导和尾随空格 我对strip有点熟悉,但我不确定现在我能不能只去掉前导和尾随的空格 我想在保存或创建筛选器之前将其作为验证或回调

我有一个Rails 3.2.14应用程序,通过一个典型的表单收集数据值。有时工作人员会输入一个字段,例如名称“Doe,John”,其中的格式应为“Doe,John”。或者在其他情况下,他们可能会在表格中添加地址,例如“德克萨斯州休斯顿西八街111号,邮编77448”,而不是“德克萨斯州休斯顿西八街111号,邮编77448”

所以基本上他们做了大量的剪切和粘贴,有时包括前导和尾随空格

我对strip有点熟悉,但我不确定现在我能不能只去掉前导和尾随的空格

我想在保存或创建筛选器之前将其作为验证或回调

如果有人对如何去除前导/尾随空格以及验证或方法的外观有任何建议,我将不胜感激。

请查看

您可以很容易地使用它,如下所示

class User < ActiveRecord::Base

  normalize_attribute :first_name, :with => :strip

end
class用户:strip
结束
此外,还有一些其他选项可用,如布尔值、电话号码或手机号码

可以将多个属性的规格化器用作

class User < ActiveRecord::Base

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

end
class用户:strip
结束
这有非常干净的语法可供使用

编辑:

属性规格化器还提供了更多选项

  • :squish=>与相同
  • :phone=>删除非数字

您还可以在应用程序中定义规范化器,您可以使用
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*$

因此,您的代码可以是:

str.gsub!(/^\s*|\s*$/, '')
这就是您所寻找的无麻烦、安全的引导和训练空白条带化

基本用法
  • 将gem安装到
    gem文件中

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

    class YourModel < ActiveRecord::Base
    
      strip_attributes
    
    end
    
    classyourmodel
    ProTip:如果您有其他模型继承自的基类,请将其放入其中

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


    但是,默认情况非常好,而且非常安全。我发现这比要求您指定要剥离哪些属性的备选方案要好。一般来说,您希望剥离所有属性。

    以下是我在保存之前尝试使用
    的要点。
    @cz3ch使用这个简单的方法回答。我刚刚安装并设置了属性规范化器,并使用示例挤压字段。但是,如果一个字段中有两个连续的空格,如德克萨斯州休斯顿第8街111号77448,则不会像squish那样删除多余的空格。你知道为什么吗?@cz3ch要挤压你可以简单地使用
    规范化属性:facility\u name,:facility\u address,:facility\u phone,:with=>:squish
    @Allerin我已经设置好了,它确实删除了前导/尾随空格。但是,如果字符之间有额外的空格,则不会挤压/删除该空格。有没有想过为什么?谢谢你的帮助!这也会起作用,所以我会创建一个自定义方法并对其调用validate?@cz3ch由您决定如何实现它。我想给你看其他的选择谢谢你的建议,我很感激。我可以看出,这对于我心目中的一些自定义验证非常有用。