基于Skooma库的输入验证实现咨询:合法值列表校验方法及相关示例查询
解决Skooma库合法值列表校验的问题
一、合法值列表校验的实现方法
Skooma内置了:in验证器,专门用来校验字段值是否属于指定的合法列表,完全匹配你的需求。下面针对你提到的两种合法值定义形式,分别给出实现示例:
1. 基于列表形式的合法值
先定义你的合法类别列表:
valid_categories = [ "Core network threats", "Access network threats", "Multi edge computing threats", "Virtualisation threats", "Physical infrastructure threats", "Generic threats" ]
然后修改你的验证Schema,给:category字段添加:in验证规则(字段类型和验证器可以放在同一个列表里):
schema = %{ :title => :string, :category => [:string, {:in, valid_categories}], :high_level_category => :string, :description => :string, :potential_impacts => :string, :affected_assets => :string, :rating => :string }
2. 基于Map形式的合法值
如果你用Map维护键值对形式的合法类别,可以先提取Map的values作为校验列表:
category_map = %{ core: "Core network threats", access: "Access network threats", multi: "Multi edge computing threats", virtualisation: "Virtualisation threats", physical: "Physical infrastructure threats", generic: "Generic threats" }
然后在Schema中使用Map.values/1获取合法值列表:
schema = %{ :title => :string, :category => [:string, {:in, Map.values(category_map)}], :high_level_category => :string, :description => :string, :potential_impacts => :string, :affected_assets => :string, :rating => :string }
自定义错误信息(可选)
如果需要更友好的错误提示,可以给:in验证器添加自定义消息:
category: [ :string, {:in, valid_categories, message: "必须是以下合法类别之一:#{Enum.join(valid_categories, ", ")}"} ]
二、Skooma示例项目参考
目前公开的第三方Skooma示例项目确实比较少,但你可以直接参考Skooma官方仓库里的测试用例,里面覆盖了各种验证场景(包括自定义验证器、内置验证器组合使用等),是最权威的参考资料,能帮你快速掌握不同校验需求的实现方式。
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

