Ecto Changeset - 如何验证一个字段只包含数字并接受一个小数点

Ecto Changeset - How to validate that a field contains only numbers and accepts one decimal point

我是 Elixir 初学者。

我正在尝试验证员工工作时间的字段。我有一个属性为 type="number" 的输入,但是此属性不能完全适用于 Internet Explorer 11,因此我需要后端验证才能具有浏览器兼容性。

要求是:

  1. 该字段只能包含数字,非数字字符不应有效。
  2. 字段最多允许一位小数,步长为0.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])?$/)

此正则表达式表示 至少一位数字,后跟一个可选的零或五点


旁注:请注意,如果您打算让此应用程序在全球范围内使用,许多国家/地区都使用 e。 G。小数点分隔符的逗号 (,) 和涉及语言环境的代码必须更加繁琐。