Jas*_*ump 29 ruby regex ruby-on-rails-3
我已经搜索了,看起来这应该很简单,但我无法让它工作.我想在保存电话号码之前删除所有非数字字符.这就是我目前所拥有的:
before_save { |workorder| workorder.phonenumber =
phonenumber.to_s.gsub(/\D/, '').to_i }
Run Code Online (Sandbox Code Playgroud)
因此,如果用户输入
925-555-5555
Run Code Online (Sandbox Code Playgroud)
它应该保存9255555555,但它实际上只保存了925并且忽略了之后的所有内容
我也尝试过:
before_save { |workorder| workorder.phonenumber =
phonenumber.to_s.gsub(/[^0-9]/, "").to_i }
Run Code Online (Sandbox Code Playgroud)
结果相同.
解决了:
def raw_phonenumber
self.phonenumber
end
def raw_phonenumber=(s)
self.phonenumber=s.gsub(/\D/, '')
end
Run Code Online (Sandbox Code Playgroud)
Bal*_*ick 59
您当然已将phonenumber列定义为数字.这就是为什么当您'925-555-5555'在phonenumber属性中设置时,它会被转换为数字,并且只925保留.
最佳解决方案是将数据库中的列类型更改为string.创建新迁移:
change_column :table_name, :phonenumber, :string, limit: 30
Run Code Online (Sandbox Code Playgroud)
否则,你可以覆盖这样的setter来删除非数字字符(但它不会修复以'0'开头的电话号码):
def phonenumber=(phonenumber)
write_attribute(:phonenumber, phonenumber.gsub(/\D/, ''))
end
Run Code Online (Sandbox Code Playgroud)
此博客文章中有更多替代方案
最简单的方法是改变方法field=:
def field=(value)
super(value.delete('^0-9'))
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18920 次 |
| 最近记录: |