Number type
Ensure the field's value is a valid number
or a string representation of a number. The string values are converted to a number using the Number
function.
The number validation will fail when the input value is either Number.POSITIVE_INFINITY or Number.NEGATIVE_INFINITY.
import vine from '@vinejs/vine'
const schema = vine.object({
age: vine.number().withoutDecimals()
})
Using the following modifiers, you may mark the field as optional
or nullable
.
See also: Working with undefined
and null
values
{
age: vine.number().withoutDecimals().nullable()
}
{
age: vine.number().withoutDecimals().optional()
}
Defining error message
You may define custom error messages for the following number based rules.
const messages = {
number: 'The {{ field }} field must be a number',
min: 'The {{ field }} field must be at least {{ min }}',
max: 'The {{ field }} field must not be greater than {{ max }}',
range: 'The {{ field }} field must be between {{ min }} and {{ max }}',
positive: 'The {{ field }} field must be positive',
negative: 'The {{ field }} field must be negative',
decimal: 'The {{ field }} field must have {{ digits }} decimal places',
withoutDecimals: 'The {{ field }} field must not have decimal places',
}
vine.messagesProvider = new SimpleMessagesProvider(messages)
Strict mode
You may enable the strict mode to disallow the string representation of a number. The value's data type must be a valid JavaScript number in strict mode.
{
age: vine
.number({ strict: true })
.withoutDecimals()
}
Validations
Following is the list of validation rules you can apply on a string.
min
Enforce the value to be greater than the pre-defined minimum value.
vine.object({
age: vine.number().min(18)
})
max
Enforce the value to be less than the pre-defined minimum value.
vine.object({
age: vine
.number()
.min(18)
.max(60)
})
range
Enforce the value to be under the range of minimum and maximum values.
vine.object({
age: vine
.number()
.range([18, 60])
})
positive
Enforce the value to be a positive number.
vine.object({
marks: vine
.number()
.positive()
})
negative
Enforce the value to be a negative number.
vine.object({
freezing_tempature: vine
.number()
.negative()
})
decimal
Enforce the value to be a number with decimal values. You can define fixed decimal places or give a minimum and maximum range.
vine.object({
price: vine
.number()
.decimal(2) // fixed: 9.99
})
vine.object({
price: vine
.number()
.decimal([0, 2]) // range: 9.99 or 9
})
withoutDecimals
Disallow numeric values with decimal places.
vine.object({
age: vine.number().withoutDecimals()
})
in
Enforce the value to be one of the pre-defined values. You can pass an array of values to the in
method.
vine.object({
price: vine.number().in([1, 2, 4, 8])
})