当前位置: 首页 > 知识库问答 >
问题:

在Rails中进行验证之前删除电话号码输入

华浩壤
2023-03-14

我正在尝试将客户端模型中的contact\u phone列设置为整数数据类型。我仍然希望能够允许用户以他们喜欢的任何格式(即999-999-9999或999.999.9999)输入电话号码,并在将其验证为有效电话号码之前去掉任何非数字字符。

不幸的是,Rails似乎不想让我在验证之前对数据运行gsub,因为它是FixNum数据类型。这是否意味着我必须将其设置为数据库中的字符串,以允许用户在验证之前输入非数字字符?

我的客户模型:

  before_validation :strip_contact_phone

  protected  

  def strip_contact_phone
    self.contact_phone = self.contact_phone.gsub(/[^0-9]/, '') 
  end

以及尝试保存新客户端时产生的错误:

undefined method `gsub' for 646:Fixnum

共有1个答案

濮书
2023-03-14

使用整数列类型是有问题的,因为Rails对数据库支持的属性执行赋值(和检索)类型转换。这意味着,当您尝试将字符串分配给整数字段时,您将键入字符串并丢失数据。例如:

"123-123-1234".to_i # => 123

这就是为什么您对646: Fixnum有未定义的方法“gsub”。Rails已经类型化了用户输入的电话号码字符串,将值截断为646,是的,gsub不是Fixnum的有效方法。所以一定要将电话号码列类型更改为String。然后您可以自由执行您的gsub,并且电话号码不会事先被截断。

def strip_contact_phone
  self.contact_phone.gsub!(/[^0-9]/, '')
end

 类似资料:
  • 我在验证电话号码时遇到了问题。电话号码是一个10位数的字符串,应该填充在三个输入字段中第一个输入字段--仅有3位数(要求,只能接受数字和最大长度3)第二个输入字段--仅有3位数(要求,只能接受数字和最大长度3)第三个输入字段--仅有4位数(要求,只能接受数字和最大长度4)

  • 在我当前的项目中,我使用电子邮件ID注册用户,然后在个人资料部分,当用户更新电话号码时,我验证该电话号码 现在真正的痛苦是,我的用户可以使用电话号码或电子邮件ID登录,但对于电子邮件ID,用户必须输入密码 我希望用户使用电子邮件或带有密码的电话登录。就像Flipkart那样。 我有什么办法可以做到吗?

  • 我目前使用phonenumbers包作为我的Django的UserCreationForm的电话号码字段的验证方法。在我当前的代码中,我使用get方法从其字段中检索电话号码,然后进行验证。如果输入的数字不存在,将弹出一个表单错误,并声明该数字不是一个国家的格式(在本例中,我使用的是新加坡)。请告诉我应该对我当前的代码做什么修改。 我希望输出验证phone字段中输入的电话号码,没有国家代码,只有8位

  • 我是HTML,有谁能帮我验证一个电话号码只有'+'和数字值和电话号码不超过13个数字,并验证电子邮件与'@'和‘。我不想使用javascript

  • 我想弄清楚这个验证手机号码到我的Android系统是如何工作的。 我已经添加了代码和whant来验证46123456789,但最后一个号码(9)没有添加到电话号码中。 我用的是: 我是不是错过了什么