Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 on rails 删除Rails中除数字以外的所有字符_Ruby On Rails_Ruby_Filter_Numbers_Filtering - Fatal编程技术网

Ruby on rails 删除Rails中除数字以外的所有字符

Ruby on rails 删除Rails中除数字以外的所有字符,ruby-on-rails,ruby,filter,numbers,filtering,Ruby On Rails,Ruby,Filter,Numbers,Filtering,我的用户正在提供这些信息 123-4567-5665 123124-124325 但我只需要以数字形式提交。此外,我也不能指望用户通过向他们发出警报来帮我做到这一点。那对他们来说太不方便了 所以in DB的结果应该是1234567665 我正在使用RubyonRails4.2 我应该使用什么过滤器?在哪里?谢谢。但是我应该把这个代码放在哪里呢?def raw_phonenumber self.phonenumber end def raw_phonenumber=s self.phonenumb

我的用户正在提供这些信息

123-4567-5665

123124-124325

但我只需要以数字形式提交。此外,我也不能指望用户通过向他们发出警报来帮我做到这一点。那对他们来说太不方便了

所以in DB的结果应该是1234567665

我正在使用RubyonRails4.2


我应该使用什么过滤器?在哪里?

谢谢。但是我应该把这个代码放在哪里呢?def raw_phonenumber self.phonenumber end def raw_phonenumber=s self.phonenumber=s.gsub/\D/,end您的答案是正确的,因为它只会处理每个实例,所以性能并不是一个很大的因素,但是Stringscan在这些情况下实际上执行得更快,例如my_属性。to_.scan/\D+/。非常感谢!它工作得很好。回答接受@engineersmnky我以前见过,但我想知道\d+是否是这次的真正钥匙?还是我的基准测试做错了?我从我的一张桌子上抓取了大约2.5万个电话号码。在我运行scan/\d+/的几个测试中,我对@engineersmnky感到好奇。join比gsub/\d+/慢了一点,大约15%。使用scan的方法必须在创建新字符串之前创建一个新数组,因此它可能也会使用更多内存,尽管我没有专门对此进行测试。和往常一样,系统的性能变化很大,所以基准测试非常重要。Phillip Hallstrom&@WizadoFogz我觉得这一定是一个系统,而且显然是依赖于ruby版本的项目,因为我的基准测试正如我所描述的那样。我想这就是为什么在实际运行应用程序或代码的系统上进行基准测试很重要的原因。在这种情况下,即使超过10万次迭代,差异也非常小,因此我的评论可能是,您也可以这样做:
class YourModel < ActiveRecord::Base

  before_validation :tweak_my_attribute

  def tweak_my_attribute
     self.my_attribute = my_attribute.to_s.gsub(/\D/, '')
  end

end