我想验证电话字段,telephone1,telephone2,contactNumber为8位,第一个数字以2-3,5-9开头。它适用于验证,但如果电话2或contactNumber为空,则不起作用。如何将regex设置为适合带有此约束的空行(无数字)?
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
谢谢
李志伟
发布于 2016-10-09 15:29:39
您似乎可以使用以下选项(请参阅本参考):
allow_blank: true
如果属性值为
blank?
,例如nil
或空字符串,此选项将允许验证通过。
此外,如果您希望regex模式与您需要的数字或空字符串匹配,则可以使用可选的非捕获组(?:...)?
括住整个模式。
/\A(?:[2-35-9]\d{7})?\z/
^^^ ^^
见regex演示。
我猜你认为逗号分隔字符类中的范围。实际上,它与字面逗号相匹配。因此,我建议将其从模式中删除。
https://stackoverflow.com/questions/39943982
复制相似问题