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