API Reference elx_validation v0.1.3
Modules
Elx Validation
- Easy and Simple Data validator.
make
function for start validation- ElxValidation Github Wiki Page
install
mix.exs
{:elx_validation, "~> 0.1.3"}
mix deps.get
How To use
example_data = %{
first_name: "Majid"
}
rules = [
%{
field: "first_name",
as: "first name",
validate: ["required", "string", "max:128"].
},
]
field : The Field name that need to validate
as : its optional and use for response error
validate : list of rules and validations
Run Validation : ElxValidation.make(example_data , rules)
Validator has Error
%{
errors: [
name: ["Error Message" , "Error Message"]
],
failed: true
}
Validator without Error:
%{
errors: [],
failed: false
}
- The field under validation must be "yes", "on", 1, or true. This is useful for validating "Terms of Service"
acceptance or similar fields.
data = %{ agreement1: "on", agreement2: true, agreement3: "true", agreement4: "yes", agreement5: "1", agreement6: 1, agreement7: "off" } rules = [ %{ field: "agreement1", validate: ["required", "accepted"] }, %{ field: "agreement2", validate: ["accepted"] }, %{ field: "agreement3", validate: ["accepted"] }, %{ field: "agreement4", validate: ["accepted"] }, %{ field: "agreement5", validate: ["accepted"] }, %{ field: "agreement6", validate: ["accepted"] }, %{ field: "agreement7", validate: ["accepted"] } ] ElxValidation.make(data , rules)
- agreement7 returned error because accepted validation must be one of the : true, "true", 1 , "1" , "on" , "yes"
string
- The field under validation must be a string. If you would like to allow the field to also be null, you should assign
the nullable rule to the field.
data = %{ user_name1: "john_007", user_name2: 1879, ---> return error } rules = [ %{ field: "user_name1", validate: ["string"] }, %{ field: "user_name2", validate: ["string"] } ]
alpha
- The field under validation must be entirely alphabetic characters.
data = %{ p1: "John Doe", p1: "James 007", ---> return error } rules = [ %{ field: "p1", validate: ["alpha"] }, %{ field: "p2", validate: ["alpha"] } ]
start_with:foo
- The field under validation must start with the given values.
data = %{
start_code: "G123other_string",
start_code2: "other_string". ---> return error
}
rules = [
%{
field: "start_code",
validate: ["start_with:G123"]
},
%{
field: "start_code2",
validate: ["start_with:Me32"]
}
]
end_with:foo
- The field under validation must end with the given values
data = %{ end_code: "other_stringG123", end_code2: "other_string". ---> return error } rules = [ %{ field: "end_code", validate: ["end_with:G123"] }, %{ field: "end_code2", validate: ["end_with:Me32"] } ]
Build rules by rule name
boolean
- The field under validation must be able to be cast as a boolean. Accepted input are true, false, 1, 0, "1", and "0".
data = %{ is_ok1: "true", is_ok2: true, is_ok3: "false", is_ok4: false, is_ok5: 0, is_ok6: 1, is_ok7: "0", is_ok8: "1", is_ok9: "yes", ---> return error } rules = [ %{ field: "is_ok1", validate: ["boolean"] }, %{ field: "is_ok2", validate: ["boolean"] }, %{ field: "is_ok3", validate: ["boolean"] }, %{ field: "is_ok4", validate: ["boolean"] }, %{ field: "is_ok5", validate: ["boolean"] }, %{ field: "is_ok6", validate: ["boolean"] }, %{ field: "is_ok7", validate: ["boolean"] }, %{ field: "is_ok8", validate: ["boolean"] }, %{ field: "is_ok9", validate: ["boolean"] }, ]
confirmed
- The field under validation must have a matching field of {field}_confirmation. For example, if the field under
validation is password, a matching password_confirmation field must be present in the input.
data = %{ password: "123456", password_confirmation: "123456", } rules = [ %{ field: "password", validate: ["confirmed"] }, ]
date
- The field under validation must be a valid, non-relative date.
- "2020-06-26"
time
- The field under validation must be a valid, non-relative time.
- am / pm is optional
- "20:13"
- "01:02"
- "02:40am"
- "05:20pm"
datetime
- The field under validation must be a valid datetime identifier
- "2020-06-26 12:20"
timezone
- The field under validation must be a valid timezone identifier
- "+04:30"
- "-01:30"
data = %{
birthdate: "1990-04-17",
start_time: "13:30",
expired: "2020-06-28 12:20",
my_zone: "+04:30"
}
rules = [
%{
field: "birthdate",
validate: ["date"]
},
%{
field: "start_time",
validate: ["time"]
},
%{
field: "expired",
validate: ["datetime"]
},
%{
field: "my_zone",
validate: ["timezone"]
},
]
date_equals:date
- The field under validation must be equal to the given date.
after:date
- The field under validation must be a value after a given date.
after_or_equal:date
- The field under validation must be a value after or equal to the given date. For more information, see the after rule.
before:date
- The field under validation must be a value preceding the given date.
before_or_equal:date
- The field under validation must be a value preceding or equal to the given date.
data = %{ eq_bd: "1990-04-17", ---> == "1990-04-17" after_bd: "1990-04-20", ---> > "1990-04-17" after_equal_bd: "1990-04-18", ---> >= "1990-04-17" before_bd: "1990-04-16", ---> < "1990-04-17" before_equal_bd: "1990-04-17", ---> <= "1990-04-17" } rules = [ %{ field: "eq_bd", validate: ["date_equals:1990-04-17"] }, %{ field: "after_bd", validate: ["after:1990-04-17"] }, %{ field: "after_equal_bd", validate: ["after_or_equal:1990-04-17"] }, %{ field: "before_bd", validate: ["before:1990-04-17"] }, %{ field: "before_equal_bd", validate: ["before_or_equal:1990-04-17"] } ]
different:value
- The field under validation must have a different value than field.
equal:value
- The field under validation must be equal to the given field. The two fields must be of the same type. Strings and numerics are evaluated using the same conventions as the size rule.
gt:value
- The field under validation must be greater than the given field. The two fields must be of the same type. Strings and numerics are evaluated using the same conventions as the size rule.
gte:value
- The field under validation must be greater than or equal to the given field. The two fields must be of the same type. Strings and numerics are evaluated using the same conventions as the size rule.
lt:value
- The field under validation must be less than the given field. The two fields must be of the same type. Strings and numerics are evaluated using the same conventions as the size rule.
lte:value
- The field under validation must be less than or equal to the given field. The two fields must be of the same type. Strings and numerics are evaluated using the same conventions as the size rule.
examples
data = %{
num_diff: 234 --> not be 233
str_diff: "MQZVD" --> not be ABCD
}
rules = [
%{
field: "num_diff",
validate: ["different:233"]
},
%{
field: "str_diff",
validate: ["different:ABCD"]
}
]
data = %{
num_eq: 100, --> must be 100
str_eq: "abcd" --> must be "abcd"
}
rules = [
%{
field: "num_eq",
validate: ["equal:100"]
},
%{
field: "str_eq",
validate: ["equal:abcd"]
},
]
data = %{
num_gt: 101, --> greater than 100
num_gte: 200, --> greater than or equal 200
str_gt: "abcd", --> length of this must greater than length of abc(3 char)
str_gte: "abcd" --> length of this must greater than or equal length of abc(3 char)
}
rules = [
%{
field: "num_gt",
validate: ["gt:100"]
},
%{
field: "num_gte",
validate: ["gte:200"]
},
%{
field: "str_gt",
validate: ["gt:abc"]
},
%{
field: "str_gte",
validate: ["gte:abc"]
},
]
data = %{
num_lt: 99, --> less than 100
num_lte: 199, --> less than or equal 200
str_lt: "ab", --> length of this must less than length of abc(3char)
str_lte: "abcd" --> length of this must less than length of abcde(5 char)
}
rules = [
%{
field: "num_lt",
validate: ["lt:100"]
},
%{
field: "num_lte",
validate: ["lte:200"]
},
%{
field: "str_lt",
validate: ["lt:ABC"]
},
%{
field: "str_lte",
validate: ["lte:ABCDE"]
},
]
Message builder
Control Exceptions and errors
Run Check field exist on data
in:foo,bar,...
- The field under validation must be included in the given list of values.
not_in:foo,bar,...
- The field under validation must not be included in the given list of values.
data = %{ country: "italy", grade: "a", } rules = [ %{ field: "country", validate: ["in:iran,italy,usa"] }, %{ field: "grade", validate: ["not_in:c,d,e", "in:a,b"] } ]
- The field under validation must be formatted as an email address.
url
- The field under validation must be a valid URL.
ip
- The field under validation must be an IP address.
ipv4
- The field under validation must be an IPv4 address.
ipv6
- The field under validation must be an IPv6 address.
data = %{
email: "example@gmail.com",
url: "http://google.com",
ip: "192.168.1.1",
ipv4: "192.168.1.1",
ipv6: "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
}
rules = [
%{
field: "email",
validate: ["email"]
},
%{
field: "url",
validate: ["url"]
},
%{
field: "ip",
validate: ["ip"]
},
%{
field: "ipv4",
validate: ["ipv4"]
},
%{
field: "ipv6",
validate: ["ipv6"]
}
]
min:value
- The field under validation must have a minimum value. Strings and numerics are evaluated in the same fashion as the size rule.
data = %{
name: "john",
age: 19 ---> return error minimum value is 20
}
rules = [
%{
field: "name",
validate: ["min:3"]
},
%{
field: "age",
validate: ["min:20"]
}
]
numeric
- The field under validation must be numeric.
data = %{
number1: 2121,
number2: "2121" ----> return error
}
rules = [
%{
field: "number1",
validate: ["numeric"]
},
%{
field: "number2",
validate: ["numeric"]
}
]
digits:value
- The field under validation must be numeric and must have an exact length of value.
data = %{
age1: 12,
age2: 9 ---> return error min 2 digit required
}
rules = [
%{
field: "age1",
validate: ["digits:2"]
},
%{
field: "age2",
validate: ["digits:2"]
}
]
Required
- The field under validation must be present in the input data and not empty. A field is considered "empty" if one of
the following conditions are true:
- The value is null.
- The value is an empty string.
data = %{
first_name: "Majid"
}
rules = [
%{
field: "name",
validate: ["required"]
}
]
rules defined by "name" but data defined by "first name"
it returns error: "The name is not exist"
data = %{
name: ""
}
rules = [
%{
field: "name",
validate: ["required"]
}
]
rules defined "required" so null , empty string not excepted
it returns error: "The name field is required."
Required If
- required_if:anotherfield
- The field under validation must be present and not empty if the anotherfield field is exist and equal to any value.
data = %{
first_name: "Majid",
last_name: "Ahmadi" ---> if first_name exist and has value last_name field is required
}
rules = [
%{
field: "first_name",
validate: ["nullable", "string" , "max:50"]
},
%{
field: "last_name",
validate: ["required_if:first_name"]
}
]
Required Unless
- required_unless:anotherfield
- The field under validation must be present and not empty unless the anotherfield is Not Exist or be null or empty or "" value.
data = %{
email: "email@example.com",
phone: "+123456789" ---> if email not exist or has null or "" value the phone field is required
}
rules = [
%{
field: "email",
validate: ["nullable" , "email"]
},
%{
field: "phone",
validate: ["required_unless:email"]
}
]
Required with
- required_with:foo,bar,...
- The field under validation must be present and not empty only if any of the other specified fields are present and not empty.
data = %{
first_name: "John",
last_name: "doe", --> required if first_name defined and has any value
full_name: "John Doe" -->required if first_name,last_name is exist or not empty
}
rules = [
%{
field: "first_name",
validate: ["required"]
},
%{
field: "last_name",
validate: ["required_if:first_name"]
},
%{
field: "full_name",
validate: ["required_with:first_name,last_name"]
}
]
Required Without
- required_without:foo,bar,...
- The field under validation must be present and not empty only when any of the other specified fields are empty or not present.
data = %{
first_name: "",
last_name: "",
full_name: "John Doe" -->required if first_name,last_name is/are not exist or empty
}
rules = [
%{
field: "first_name",
validate: ["nullable" , "alpha"]
},
%{
field: "last_name",
validate: ["nullable" , "alpha"]
},
%{
field: "full_name",
validate: ["required_with:first_name,last_name"]
}
]
important notice
- if you use required if , unless ,with and without, validator will validates all rules that you set
data = %{
first_name: "John",
last_name: "doe" --> alpha , min and max will validate
}
rules = [
%{
field: "first_name",
validate: ["nullable", "alpha", "min:3", "max:10"]
},
%{
field: "last_name",
validate: ["required_if:first_name" , "alpha", "min:3", "max:10"]
}
]
the logic is :
if first_name has value then last_name is required
if first_name hasn't value then last_name is not required
in case first_name does not exist or null last_name is not necessary but alpha and min and max validations still works.
File
- the field under validation must be a file and at leas 1 kilobyte size
- empty value return error unless field is under nullable validation
data = %{
logo: "LOGO FILE",
}
rules = [
%{
field: "logo",
validate: ["file","min_size:10","max_size:20","mimes:png,jpg","mime_types:image/png,image/jpeg"]
},
]
- file : data must be a file and at least 1 kb size
- min_size: minimum size (Kb) of file
- max_size: maximum size (Kb) of file
- mimes: list of accepted mimes
- mime_types: list of accepted mime_types
uuid
- The field under validation must be a valid RFC 4122 universally unique identifier (UUID).
data = %{
uuid_1: "56b2724e-9074-4dc3-9803-4bb13c92ee0e",
uuid_2: "56b2-9074-4dc3-9803-4bb13c9", ---> not UUID
}
rules = [
%{
field: "uuid_1",
validate: ["uuid"]
},
%{
field: "uuid_2",
validate: ["uuid"]
},
]
Validator Factory