Regex 如何使用正则表达式验证RubyonRails的空行(无数字)与约束
我想验证电话字段,电话1,电话2,联系人号码是否为8位数字,以及第一个数字是否以2-3,5-9开头。它在验证时起作用,但如果电话2或联系人号码为空则不起作用。如何设置正则表达式以适应具有此约束的空行(无数字)Regex 如何使用正则表达式验证RubyonRails的空行(无数字)与约束,regex,ruby-on-rails-4,Regex,Ruby On Rails 4,我想验证电话字段,电话1,电话2,联系人号码是否为8位数字,以及第一个数字是否以2-3,5-9开头。它在验证时起作用,但如果电话2或联系人号码为空则不起作用。如何设置正则表达式以适应具有此约束的空行(无数字) class Invitation < ApplicationRecord validates :church, presence: true, length: { maximum: 50 } VALID_PHONE_REGEX = /\A[2-3,5-9]\d{7}\z/
class Invitation < ApplicationRecord
validates :church, presence: true, length: { maximum: 50 }
VALID_PHONE_REGEX = /\A[2-3,5-9]\d{7}\z/
validates :telephone1, presence: true,
format: { with: VALID_PHONE_REGEX },
uniqueness: { case_sensitive: false }
validates :telephone2, presence: false,
format: { with: VALID_PHONE_REGEX },
uniqueness: { case_sensitive: false }
validates :contactNumber, presence: false,
format: { with: VALID_PHONE_REGEX },
uniqueness: { case_sensitive: false }
end
班级邀请
谢谢
Patrick Lee您似乎可以使用以下选项(请参阅): 如果属性值为
空白?
,例如nil
或空字符串,此选项将允许验证通过
此外,如果希望正则表达式模式与所需的数字或空字符串匹配,可以使用可选的非捕获组(?:…)?
:
看
我猜您认为逗号分隔字符类中的范围。事实上,它匹配一个文字逗号。因此,我建议将其从模式中删除。如果希望模式也匹配空字符串,请尝试
/\A(?[2-35-9]\d{7})?\z/
。我猜您认为逗号分隔字符类中的范围,我删除了它,因为那里的逗号与文字逗号匹配。另外,尝试allow\u blank:true
它可以工作。谢谢
allow_blank: true
/\A(?:[2-35-9]\d{7})?\z/
^^^ ^^