【问题标题】:Ecto Changeset - How to validate that a field contains only numbers and accepts one decimal pointEcto Changeset - 如何验证字段仅包含数字并接受一个小数点
【发布时间】:2021-06-21 13:47:51
【问题描述】:

我是 Elixir 初学者。

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

要求是:

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

但在摆弄之后,我似乎无法验证这些要求。任何帮助表示赞赏,干杯。

【问题讨论】:

    标签: validation elixir ecto


    【解决方案1】:

    你关注Ecto.Changeset.validate_format/4

    ...
    |> validate_format(:working_hours, ~r/^\d+(?:\.[05])?$/)
    

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2019-12-02
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多