feat: add phone validation

This commit is contained in:
Moritz 2025-06-02 22:38:16 +02:00
parent dcf268dfb8
commit 0f5d3d7fdd
Signed by: moritz
GPG key ID: 1020A035E5DD0824
3 changed files with 31 additions and 2 deletions

View file

@ -0,0 +1,28 @@
defmodule Mv.Membership.PhoneNumber do
@match_pattern ~S/^\+?\d{5,16}$/
@match_regex Regex.compile!(@match_pattern)
use Ash.Type.NewType,
subtype_of: :string,
constraints: [
match: @match_pattern,
trim?: true
]
@impl true
def cast_input("", _), do: {:ok, nil}
@impl true
def cast_input(value, _) when is_binary(value) do
value = String.trim(value)
if Regex.match?(@match_regex, value) do
{:ok, value}
else
:error
end
end
@impl true
def cast_input(_, _), do: :error
end

View file

@ -24,7 +24,8 @@ defmodule Mv.Membership.Property do
date: [type: :date],
integer: [type: :integer],
string: [type: :string],
email: [type: Mv.Membership.Email]
email: [type: Mv.Membership.Email],
phone: [type: Mv.Membership.PhoneNumber]
]
]
end

View file

@ -19,7 +19,7 @@ defmodule Mv.Membership.PropertyType do
attribute :name, :string, allow_nil?: false, public?: true
attribute :value_type, :atom,
constraints: [one_of: [:string, :integer, :boolean, :date, :email]],
constraints: [one_of: [:string, :integer, :boolean, :date, :email, :phone]],
allow_nil?: false,
description: "Definies the datatype `Property.value` is interpreted as"