react-use-password-validator
Version:
React Hooks Password Validator
129 lines (105 loc) • 2.8 kB
Markdown
> A React Hook that provides password validator functionality.
```bash
npm install --save react-use-password-validator
```
- password-validator ^5.1.1
- React 16.8+
```tsx
import React, { useState } from 'react'
import usePasswordValidator from 'react-use-password-validator'
const PasswordForm: React.FC<{}> = props => {
const [ password, setPassword ] = useState("")
const [ isValid, setIsValid ] = usePasswordValidator()
return <input
type='password'
onChange={ e => {
setPassword(e.target.value)
setIsValid(e.target.value)
}}
value={password}
>
</input>
}
```
```ts
type UsePasswordValidator = [ boolean, ( password: string ) => void ]
```
Basically, it refers to the parameters of `password-validator`.
Please check [ password-validator ](https://www.npmjs.com/package/password-validator)
```ts
type ValidatorOptionType = number | boolean;
interface IValidatorOption {
min: number;
max: number;
digits: ValidatorOptionType;
letters: ValidatorOptionType;
lowercase: ValidatorOptionType;
uppercase: ValidatorOptionType;
symbols: ValidatorOptionType;
spaces: ValidatorOptionType;
};
export function usePasswordValidator( option?: Partial<IValidatorOption> ) { /* ... */ }
```
- if set `undefined`: Not checking anything.
- if set `true`: Make sure it is included.
- if set `false`: Make sure it is not included.
- if set `number`: Needs to contain more than the specified number.
```ts
const DEFAULT_OPTION = {
min: 6,
max: 100,
spaces: false,
letters: true
}
```
```ts
/*
* This rule is
* - At least six characters and no more than 100 characters
* - At least two numbers
* - At least two uppercase letters
* - include lowercase letters
* - Do not include spaces
*
*/
const [ isValid, setIsValid ] = usePasswordValidator({
digits: 2,
lowercase: true,
uppercase: 2,
spaces: false
})
```
As a future challenge, I also created a HOC.
```tsx
import { withValidState, WithProps } from 'react-use-password-validator';
interface IProps {
title: string;
};
const Component: React.FC<IProps&WithProps> = props => {
const [ password, setPassword ] = useState("")
const { title, isValid, setIsValid } = props;
return <input
type="password"
value={password}
onChange={ e => {
setPassword(e.target.value)
setIsValid(e.target.value)
}}>
</input>
};
export default withValidState(Component, { spaces: 1, uppercase: 1, lowercase: 1, digits: 1, symbols: 1, min: 5, max: 10 })
```
## License
MIT © [tsk-murakami](https://github.com/tsk-murakami)