joi-decimal
v1.1.2
Published
Joi extension for decimals
Downloads
156
Maintainers
Readme
joi-decimal
Joi extension for Decimal type.
Useful to validate any scientific / financial number.
⚠️ do not use .precision()
for now as it doesn't work as expected.
It will be fixed in v1.2.0.
Usage
const BaseJoi = require('@hapi/joi');
const DecimalExtension = require('joi-decimal');
const Joi = BaseJoi.extend(DecimalExtension);
const schema = Joi.decimal().greater(100.0);
const result = schema.validate(101.00);
// result.error === null -> valid
API
decimal
- inherits from Any
Generates a schema object that matches a Decimal type (as well as a JavaScript string or number that can be converted to Decimal type). If
the validation convert
option is on (enabled by default), a string or number will be converted to a Decimal
, if specified.
Also, if
convert
is on and decimal.precision()
is used, the value will be converted to the specified precision
as well.
const dec = Joi.decimal();
dec.validate('0.046875', (err, value) => { });
Possible validation errors: decimal.base
decimal.finite()
Requires the number to be finite.
const schema = Joi.decimal().finite();
Possible validation errors: decimal.finite
decimal.greater(limit)
Specifies that the value must be greater than limit
or a reference.
const schema = Joi.decimal().greater(5.000);
const schema = Joi.object({
min: Joi.decimal().required(),
max: Joi.decimal().greater(Joi.ref('min')).required()
});
Possible validation errors: decimal.greater
, decimal.ref
decimal.integer()
Requires the number to be an integer (no floating point).
const schema = Joi.decimal().integer();
Possible validation errors: decimal.integer
decimal.less(limit)
Specifies that the value must be less than limit
or a reference.
const schema = Joi.decimal().less(10);
const schema = Joi.object({
min: Joi.decimal().less(Joi.ref('max')).required(),
max: Joi.decimal().required()
});
Possible validation errors: decimal.less
, decimal.ref
decimal.max(limit)
Specifies the maximum value where:
limit
- the maximum value allowed or a reference.
const schema = Joi.decimal().max(10);
const schema = Joi.object({
min: Joi.decimal().max(Joi.ref('max')).required(),
max: Joi.decimal().required()
});
Possible validation errors: decimal.max
, decimal.ref
decimal.min(limit)
Specifies the minimum value where:
limit
- the minimum value allowed or a reference.
const schema = Joi.decimal().min(2);
const schema = Joi.object({
min: Joi.decimal().required(),
max: Joi.decimal().min(Joi.ref('min')).required()
});
Possible validation errors: decimal.min
, decimal.ref
decimal.multiple(base)
Specifies that the value must be a multiple of base
(or a reference):
const schema = Joi.decimal().multiple(3);
Possible validation errors: decimal.multiple
, decimal.ref
decimal.nan()
Requires the number to be NaN.
const schema = Joi.decimal().nan();
Possible validation errors: decimal.nan
decimal.negative()
Requires the number to be negative.
const schema = Joi.decimal().negative();
Possible validation errors: decimal.negative
decimal.positive()
Requires the number to be positive.
const schema = Joi.decimal().positive();
Possible validation errors: decimal.positive
decimal.precision(sd, rm)
Specifies the maximum precision where:
sd
- the number of significant digits on which to round.rm
- the rounding mode to use.
const schema = Joi.decimal().precision(2, 5);
Possible validation errors: decimal.precision
decimal.zero()
Requires the number to be zero.
const schema = Joi.decimal().zero();
Possible validation errors: decimal.zero
List of errors
decimal.base
The value is not a Decimal or could not be cast to a Decimal.
decimal.finite
The number was not finite.
decimal.greater
The number is lower or equal to the limit that you set.
Additional local context properties:
{
limit: number // Minimum value that was expected for this number
}
decimal.integer
The number is not a valid integer.
decimal.less
The number is higher or equal to the limit that you set.
Additional local context properties:
{
limit: number // Maximum value that was expected for this number
}
decimal.max
The number is higher than the limit that you set.
Additional local context properties:
{
limit: number // Maximum value that was expected for this number
}
decimal.min
The number is lower than the limit that you set.
Additional local context properties:
{
limit: number // Minimum value that was expected for this number
}
decimal.multiple
The number could not be divided by the base you provided.
Additional local context properties:
{
base: number // The number of which the input is supposed to be a multiple of
}
decimal.nan
The number is not NaN.
decimal.negative
The number was positive.
decimal.only
Only some values were allowed, the input didn't match any of them.
Additional local context properties:
{
values: Array<any> // Contains the list of the valid values that were expected
}
decimal.positive
The number was negative.
decimal.precision
The arguments (sd
and/or rm
) are not numbers.
decimal.ref
A reference was used in one of decimal.greater()
, decimal.less()
, decimal.max()
, decimal.min()
or decimal.multiple()
and the value pointed to by that reference in the input is not a valid Decimal or could not be cast to a Decimal.
decimal.zero
The number is not zero.