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