Yup-Password
Yup, dead simple password validation.
Install
Using npm:
$ npm install yup-password
Using yarn:
$ yarn add yup-password
Usage
Plug and play:
import * as yup from 'yup'
import YupPassword from 'yup-password'
YupPassword(yup)
const yup = require('yup')
require('yup-password')(yup)
const schema = yup.object().shape({
username: yup.string().email().required(),
password: yup.string().password().required(),
})
const input = {
username: 'user@example.com',
password: 'secret',
}
try {
const res = await schema.validate(input, { abortEarly: false })
} catch (e) {
console.log(e.errors)
}
Override, disable or add additional rules:
const schema = yup.string().password()
.minLowercase(8)
.min(0)
.minWords(2)
try {
const res = await schema.validate('secret', { abortEarly: false })
} catch(e) {
console.log(e.errors)
}
Pick and choose your password rules:
const schema = yup.string().min(6).minUppercase(3).maxRepeating(2).minWords(2)
await schema.isValid('Now, THIS is some password.')
await schema.isValid('But thiiis is not.')
Localize your error messages:
yup.setLocale({
string: {
minLowercase: 'Localized message (path=${path};length=${length})',
minUppercase: 'Localized message (path=${path};length=${length})',
minNumbers: 'Localized message (path=${path};length=${length})',
minSymbols: 'Localized message (path=${path};length=${length})',
maxRepeating: 'Localized message (path=${path};length=${length})',
minWords: 'Localized message (path=${path};length=${length})',
},
})
API
.password()
Password must meet the default requirements: at least 8 characters, at most 250 characters, at least 1 lowercase letter, at least 1 uppercase letter, at least 1 number and at least 1 symbol.
const schema = yup.string().password()
.minLowercase(length?: number = 1, message?: string)
Password must contain X amount of lowercase letters or more.
const schema = yup.string().minLowercase(3, 'custom message')
.minUppercase(length?: number = 1, message?: string)
Password must contain X amount of uppercase letters or more.
const schema = yup.string().minUppercase(3, 'custom message')
.minNumbers(length?: number = 1, message?: string)
Password must contain X amount of numbers or more.
const schema = yup.string().minNumbers(3, 'custom message')
.minSymbols(length?: number = 1, message?: string)
Password must contain X amount of symbols or more.
const schema = yup.string().minSymbols(3, 'custom message')
.maxRepeating(length?: number = 2, message?: string)
Password must not contain a sequence of X amount of repeated characters. For example, if the limit is 2 thiis
will pass but thiiis
will not.
const schema = yup.string().maxRepeating(3, 'custom message')
.minWords(length?: number = 2, message?: string)
Password must contain X amount of words or more. So long as a sequence of characters contains letters or numbers,
it will be recognized as a word. For example secret
, 1st!
and 1337
count as words, but !@#$%
does not.
const schema = yup.string().minWords(3, 'custom message')
License
This project is open-sourced software licensed under the MIT license.