You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:34:08