不区分大小写的validate_exclusion

时间:2016-09-25 03:48:39

标签: elixir phoenix-framework ecto

我有一个不应该用作用户名的字符串列表。我发现有validate_exclusion,但我不认为有办法在不区分大小写的情况下执行此操作。有没有办法做到这一点? validate_format可能带有正则表达式吗?

  • 注意:我希望避免简单地降低我的用户名。

2 个答案:

答案 0 :(得分:1)

我最终使用了validate_change

def changeset(struct, params \\ %{}) do
  struct
  ...
  |> validate_change(:username, validate_restricted_usernames)
end

@restricted_usernames ~w(about faq...)
def validate_restricted_usernames do
  fn :username, username ->
    case Enum.any?(@restricted_usernames, fn x -> x == String.downcase(username) end) do
      true -> [username: "username is already taken."]
      false -> []
    end
  end
end

答案 1 :(得分:0)

你说(回答)你使用了validate_change, 但你实际上并没有。 以下是validate_change/3的变体:

def changeset(struct, params \\ %{}) do
  struct
  # ...
  |> validate_change(:username, fn :username, username  ->
    if String.downcase(username) in @restricted_usernames, do: [username: "is restricted"], else: [] end)
end