Ecto Changeset - 如何验证一个字段只包含数字并接受一个小数点
Ecto Changeset - How to validate that a field contains only numbers and accepts one decimal point
我是 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])?$/)
此正则表达式表示 至少一位数字,后跟一个可选的零或五点。
旁注:请注意,如果您打算让此应用程序在全球范围内使用,许多国家/地区都使用 e。 G。小数点分隔符的逗号 (,
) 和涉及语言环境的代码必须更加繁琐。
我是 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])?$/)
此正则表达式表示 至少一位数字,后跟一个可选的零或五点。
旁注:请注意,如果您打算让此应用程序在全球范围内使用,许多国家/地区都使用 e。 G。小数点分隔符的逗号 (,
) 和涉及语言环境的代码必须更加繁琐。