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 –