joi-password
A Joi extension that help to validate a complex password

joi-password downloads joi-password version joi-password license

joi-passwordSimilar Packages:
Npm Package Weekly Downloads Trend
3 Years
🌟 Show real-time usage chart on joi-password's README.md, just copy the code below.
## Usage Trend
[![Usage Trend of joi-password](https://npm-compare.com/img/npm-trend/THREE_YEARS/joi-password.png)](https://npm-compare.com/joi-password#timeRange=THREE_YEARS)
Cumulative GitHub Star Trend
🌟 Show GitHub stars trend chart on joi-password's README.md, just copy the code below.
## GitHub Stars Trend
[![GitHub Stars Trend of joi-password](https://npm-compare.com/img/github-trend/joi-password.png)](https://npm-compare.com/joi-password)
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
joi-password3,327417.7 kB113 days agoMIT
README for joi-password

npm npm npm bundle size

NPM

joi-password

A Joi extension that help to validate a complex password

Requirement

Joi version: 17.x.x or higher

Installation

Npm

npm install joi joi-password

Yarn

yarn add joi joi-password

CDN

<script src="https://unpkg.com/joi@17.4.2/dist/joi-browser.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/heaty566/joi-password@4.2.0/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