joi-password
v4.2.0
Published
A Joi extension that help to validate a complex password
Downloads
81,330
Maintainers
Readme
joi-password
A Joi extension that help to validate a complex password
Requirement
Joi version: 17.x.x
Installation
Npm
npm install joi joi-password
Yarn
yarn add joi joi-password
CDN
<script src="https://unpkg.com/[email protected]/dist/joi-browser.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/heaty566/[email protected]/cdn/joi-password.min.js"></script>
Joi extend function
- minOfUppercase(min: number): Specifies the minimum number of uppercase string characters.
- minOfLowercase(min: number): Specifies the minimum number of lowercase string characters.
- minOfSpecialCharacters(min: number): Specifies the minimum number of special string characters.
- minOfNumeric(min: number): Specifies the minimum number of numeric characters.
- noWhiteSpaces(): Verifies that a schema has no white spaces, Please do not combine trim() function to make this function works perfectly.
- onlyLatinCharacters(): Verifies that a schema has only latin characters.
- doesNotInclude(patterns: string[]): Verifies that a schema does not include any of the given patterns.
Usage
// example/usage.js
const joi = require('joi');
const { joiPasswordExtendCore } = require('joi-password');
const joiPassword = joi.extend(joiPasswordExtendCore);
const schema = (input) =>
joi
.object({
username: joi.string().min(5).max(200).required(),
password: joiPassword
.string()
.minOfSpecialCharacters(2)
.minOfLowercase(2)
.minOfUppercase(2)
.minOfNumeric(2)
.noWhiteSpaces()
.onlyLatinCharacters()
.doesNotInclude(['password'])
.required(),
})
.validate(input);
const { error } = schema({ username: 'hello', password: 'AAaa@@00' });
console.log(error); // undefined
Custom error message
// example/custom.js
const joi = require('joi');
const { joiPasswordExtendCore } = require('joi-password');
const joiPassword = joi.extend(joiPasswordExtendCore);
const schema = (input) =>
joi
.object({
username: joi.string().required(),
password: joiPassword
.string()
.minOfSpecialCharacters(3)
.minOfLowercase(4)
.minOfUppercase(5)
.minOfNumeric(6)
.noWhiteSpaces()
.onlyLatinCharacters()
.doesNotInclude(['password'])
.messages({
'password.minOfUppercase': '{#label} should contain at least {#min} uppercase character',
'password.minOfSpecialCharacters':
'{#label} should contain at least {#min} special character',
'password.minOfLowercase': '{#label} should contain at least {#min} lowercase character',
'password.minOfNumeric': '{#label} should contain at least {#min} numeric character',
'password.noWhiteSpaces': '{#label} should not contain white spaces',
'password.onlyLatinCharacters': '{#label} should contain only latin characters',
'password.doesNotInclude': '{#label} is too common',
}),
})
.validate(input, { abortEarly: false });
const { error } = schema({ username: 'aA', password: 'aA@0は password' });
console.log(error);
// 'password' should contain at least 3 special character
// 'password' should contain at least 4 lowercase character
// 'password' should contain at least 5 uppercase character
// 'password' should contain at least 6 numeric character
// 'password' should not contain white spaces
// 'password' should contain only latin characters
// 'password' is too common
@hapi/joi supports
https://www.npmjs.com/package/hapi-joi-password
hapi-joi-password package is archived and no longer maintained, please use joi and joi-password instead.
License
MIT