Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
Regex 验证正则表达式格式,允许输入空格,但在保存记录时删除空格_Regex_Validation_Ruby On Rails 3 - Fatal编程技术网

Regex 验证正则表达式格式,允许输入空格,但在保存记录时删除空格

Regex 验证正则表达式格式,允许输入空格,但在保存记录时删除空格,regex,validation,ruby-on-rails-3,Regex,Validation,Ruby On Rails 3,下面的正则表达式验证电话号码(可能是其他任何号码),允许使用尾随空格: validates :phone, :presence => true, :format => {:with => /\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}[ ]*\z/} 我希望在末尾允许空格的原因很简单,因为有些用户可能会错误地键入空格 我希望能够做到的是,在验证期间允许使用这些空格,但在保存记录时,去掉所有前导/

下面的正则表达式验证电话号码(可能是其他任何号码),允许使用尾随空格:

validates :phone, 
          :presence => true,
          :format => {:with => /\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}[ ]*\z/}
我希望在末尾允许空格的原因很简单,因为有些用户可能会错误地键入空格

我希望能够做到的是,在验证期间允许使用这些空格,但在保存记录时,去掉所有前导/尾随空格。通过这种方式,我可以允许用户犯一个小的“错误”(即末尾的空格),但仍然可以将一个“完全有效”的值(在本例中是一个电话号码)保存到数据库中

这可以自动完成吗(对于任何模型,任何字段),这样我就不必在保存前特别修剪每个字段了

# strip leading and trailing whitespace in s # ... simply: s.strip! # modify s s.strip # return modified string # ... or with a regex s.gsub!(/^\s+|\s+$/, '') # modify s s.gsub(/^\s+|\s+$/, '') # return modified string #去掉s中的前导空格和尾随空格 # ... 简单地说: s、 脱光衣服修改 s、 strip#返回修改过的字符串 # ... 或者用正则表达式 s、 gsub!(/^\s+|\s+$/,“”)修改 s、 gsub(/^\s+|\s+$/,“”)返回修改后的字符串 #去掉s中的前导空格和尾随空格 # ... 简单地说: s、 脱光衣服修改 s、 strip#返回修改过的字符串 # ... 或者用正则表达式 s、 gsub!(/^\s+|\s+$/,“”)修改 s、 gsub(/^\s+|\s+$/,“”)返回修改后的字符串
如果只对几个字段执行此操作,则最简单的方法是使用自定义设置器:

def phone_number=(val)
    self[:phone_number] = val.rstrip
end
但是,如果您想要一个更通用的、使用anywhere的设置,我建议您编写一个ActiveRecord扩展—大致如下:

class ActiveRecord::Base
    def self.strips_trailing_spaces_from(*attrs)
        @@sts_attrs ||= []
        @@sts_attrs << attrs
        before_save :strip_trailing_spaces
    end

    def strip_trailing_spaces
        @@sts_attrs.each do |attr|
            val = self[attr]
            self[attr] = val.rstrip if val.is_a?(String)
        end
    end
end
class ActiveRecord::Base
定义self.strips_training_spaces_from(*attrs)
@@sts|u attrs | |=[]

@@sts_attrs如果您只对几个字段执行此操作,最简单的方法是使用自定义设置器:

def phone_number=(val)
    self[:phone_number] = val.rstrip
end
但是,如果您想要一个更通用的、使用anywhere的设置,我建议您编写一个ActiveRecord扩展—大致如下:

class ActiveRecord::Base
    def self.strips_trailing_spaces_from(*attrs)
        @@sts_attrs ||= []
        @@sts_attrs << attrs
        before_save :strip_trailing_spaces
    end

    def strip_trailing_spaces
        @@sts_attrs.each do |attr|
            val = self[attr]
            self[attr] = val.rstrip if val.is_a?(String)
        end
    end
end
class ActiveRecord::Base
定义self.strips_training_spaces_from(*attrs)
@@sts|u attrs | |=[]
@@sts_attrs