在我的MyDomain表中,我想确保域名存在,同时希望通过使用某些正则表达式进行验证来确保其正确性。
class MyDomain < ApplicationRecord
validates :domain, presence: true
validate :domain_invalid_value
def domain_invalid_value
url_regex = %r{\A[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?\z}ix
errors.add(:domain, "invalid value") if domain =~ url_regex ? true : false
end
end
但我的domain_invalid_value
并不能确保我包含validates :domain, presence: true
localhost
和google.com
都被视为有效域,在创建或更新时不应该这样。
答案 0 :(得分:1)
您可以在同一行中使用format
验证,即与presence
一起使用;例如:
class MyDomain < ApplicationRecord
REGEX = %r{^(http|https):\/\/|[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?$}ix
validates :domain, presence: true, format: { with: REGEX, message: "invalid value" }
end
您可以参考rails guides获取所有可用验证助手的列表。