0
我有一个不应该用作用户名的字符串列表。我发现在ecto中有validate_exclusion
,但我认为在不区分大小写的情况下有办法做到这一点。有没有办法做到这一点? validate_format
与正则表达式也许?忽略大小写validate_exclusion
- 注意:我想避免简单地将我的用户名缩减。
我有一个不应该用作用户名的字符串列表。我发现在ecto中有validate_exclusion
,但我认为在不区分大小写的情况下有办法做到这一点。有没有办法做到这一点? validate_format
与正则表达式也许?忽略大小写validate_exclusion
我最终改用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
你(回答)说,你已经使用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
相反Enum.any的'(@ restricted_usernames,FN X - > X == String.downcase(用户名)结束)'可以做'String.downcase(用户名)吗? @ restricted_usernames' –
不错的建议@OleksandrAvoyants –