validation - Ecto Changeset - 如何验证字段仅包含数字并接受一个小数点
问题描述
我是 Elixir 初学者。
我正在尝试验证员工工作时间的字段。我有一个属性为 的输入type="number"
,但是此属性不适用于 Internet Explorer 11,因此我需要后端验证以具有浏览器兼容性。
要求是:
- 该字段应该只包含数字,非数字字符不应该是有效的。
- 该字段最多允许有一位小数,步长为 0.5
例如:
- “40”应该是有效的
- “37.5”应该是有效的
- “40小时”应该是无效的
- “32.3”应该是无效的
- “37.55”应该是无效的
- “37..5”应该是无效的
这是我到目前为止得到的所有信息:
defp validate_working_hours(changeset) do
changeset
|> Changeset.validate_number(:working_hours, greater_than: 0)
end
我将如何验证我的要求?我validate_format
想在这里会派上用场 - 类似于
|> Changeset.validate_format(:working_hours, <something here>)
但是在摆弄之后,我似乎无法验证这些要求。任何帮助表示赞赏,欢呼。
解决方案
你在追求Ecto.Changeset.validate_format/4
...
|> validate_format(:working_hours, ~r/^\d+(?:\.[05])?$/)
此正则表达式表示至少一位数字,后跟一个可选的点,可以是 0 或 5。
旁注:请注意,如果您想使此应用程序在全球范围内使用,许多国家/地区使用例如逗号 ( ,
) 作为小数分隔符,并且涉及语言环境的代码必须更加繁琐。
推荐阅读
- python - scipy ndimage - 来自正向变换的 map_coordinates
- mongodb - Mongoose 不会在 mongodb 中保存特定的文档属性
- python - 如何按顺序计算字母类型?
- javascript - 如何根据值对 woocommerce 价格进行更改
- android - 当使用 getter 使用我的类时,它失去了它的价值,我不明白为什么
- php - 对 DB2 的 PHP PDO 查询在 CLI 上返回 NULL,但数据通过 APACHE
- html - 导航是固定的,但内容是相对的并且分崩离析
- mongodb - MongoDB 在线存档是否知道何时不查看数据湖
- node.js - Node.js + 请求 POST 基本授权
- python - 从 Pygame(菜单)的 menu.add.text.input 创建一个变量