react-native-password-strength-meter   
 
A highly customisable password strength meter implementation with minimal dependencies. 
Show Cases
Type Bar
| IOS | Android | 
|---|
|  |  | 
Type Box
| IOS | Android | 
|---|
|  |  | 
Type Circle
| IOS | 
|---|
|  | 
Type Text
| IOS | Android | 
|---|
|  |  | 
Getting Started
Installation
$ npm i react-native-password-strength-meter --save
Basic Usage
Password Input Usage
import React, { Component } from 'react';
import {
  View,
  StyleSheet,
  TextInput
} from 'react-native';
import RNPasswordStrengthMeter from 'react-native-password-strength-meter';
export default class PasswordInput extends Component {
  onChange = (password, score, { label, labelColor, activeBarColor }) => {
    console.log(password, score, { label, labelColor, activeBarColor });
  }
  render() {
    return (
      <View style={styles.container}>
        <RNPasswordStrengthMeter
          onChangeText={this.onChange}
          meterType="bar"
        />
      </View>
    );
  }
}
Component Usage
import React, { Component } from 'react';
import {
  View,
  StyleSheet,
  TextInput
} from 'react-native';
import { BarPasswordStrengthDisplay } from 'react-native-password-strength-meter';
export default class BarComponent extends Component {
  state = {
    password: '',
  }
  onChange = password => this.setState({ password })
  render() {
    const { password } = this.state;
    return (
      <View style={styles.container}>
        <TextInput style={styles.textInput} onChangeText={this.onChange} />
        <BarPasswordStrengthDisplay
          password={password}
        />
      </View>
    );
  }
}
Properties
Password Input Props
| Prop | Default | Type | Description | 
|---|
| onChangeText | required | func | Callback to Return Input text changes (password, score, { label, labelColor, activeBarColor }) => {} | 
| defaultPassword | "" | string | Default Password Value | 
| containerWrapperStyle | {} | object | Container wrapper style | 
| imageWrapperStyle | {} | object | Eye Image wrapper style | 
| imageStyle | {} | object | Eye Image style | 
| inputWrapperStyle | {} | object | Text Input wrapper style | 
| inputStyle | {} | object | Text Input style | 
| placeholderStyle | {} | object | Text Input placeholder style | 
| meterType | bar | enum | Meter Type. Can be bar,box,circle,text | 
| inputProps | Defaults | object | React Native's TextInput Props | 
| passwordProps | Defaults | object | Password Component Props | 
Bar Component Props
| Prop | Default | Type | Description | 
|---|
| password | required | string | Password Value | 
| touched | "" | bool | Field Touched | 
| scoreLimit | 100 | number | Password Score's maximum value | 
| variations | Defaults | object | Different validations in regex to calculate password score | 
| minLength | 5 | number | Minimum length of the password to validate | 
| labelVisible | true | bool | Label Visible | 
| levels | Defaults | array | Different Levels to calculate password score | 
| wrapperStyle | {} | object | Wrapper style | 
| barContainerStyle | {} | object | Bar Container style | 
| barStyle | {} | object | Bar style | 
| labelStyle | {} | object | Label style | 
| barColor | #f1f3f4 | string | Bar background color | 
| width | deviceWidth - 20 | number | Width of bar | 
Box Component Props
| Prop | Default | Type | Description | 
|---|
| password | required | string | Password Value | 
| touched | "" | bool | Field Touched | 
| scoreLimit | 100 | number | Password Score's maximum value | 
| variations | Defaults | object | Different validations in regex to calculate password score | 
| minLength | 5 | number | Minimum length of the password to validate | 
| labelVisible | true | bool | Label Visible | 
| levels | Defaults | array | Different Levels to calculate password score | 
| wrapperStyle | {} | object | Wrapper style | 
| boxContainerStyle | {} | object | Box Container style | 
| boxStyle | {} | object | Box style | 
| labelStyle | {} | object | Label style | 
| boxColor | #f1f3f4 | string | Box background color | 
| width | deviceWidth - 20 | number | Width of box container which will be split based on the levels | 
| boxSpacing | 2 | number | Spacing in between the boxes | 
Circular Component Props
| Prop | Default | Type | Description | 
|---|
| password | required | string | Password Value | 
| labelVisible | true | bool | Label Visible | 
| minLength | 5 | number | Minimum length of the password to validate | 
| scoreLimit | 100 | number | Password Score's maximum value | 
| easeDuration | 500 | number | Ease Duration of the meter needle | 
| variations | Defaults | object | Different validations in regex to calculate password score | 
| levels | Defaults | array | Different Levels to calculate password score | 
| wrapperStyle | {} | object | Wrapper style | 
| outerCircleStyle | {} | object | Outer circle style | 
| imageWrapperStyle | {} | object | Image wrapper style | 
| imageStyle | {} | object | Image style | 
| innerCircleStyle | {} | object | Inner circle style | 
| labelWrapperStyle | {} | object | Label wrapper style | 
| labelStyle | {} | object | Label style | 
| labelNoteStyle | {} | object | Label note style | 
| needleImage | Defaults | string | Absolute path to the needle image | 
Text Component Props
| Prop | Default | Type | Description | 
|---|
| password | required | string | Password Value | 
| touched | "" | bool | Field Touched | 
| scoreLimit | 100 | number | Password Score's maximum value | 
| variations | Defaults | object | Different validations in regex to calculate password score | 
| minLength | 5 | number | Minimum length of the password to validate | 
| labelVisible | true | bool | Label Visible | 
| levels | Defaults | array | Different Levels to calculate password score | 
| wrapperStyle | {} | object | Wrapper style | 
| labelStyle | {} | object | Label style | 
Defaults
defaultPassword: '',
containerWrapperStyle: {},
imageWrapperStyle: {},
imageStyle: {},
inputWrapperStyle: {},
inputStyle: {},
placeholderStyle: {},
meterType: 'bar',
   inputProps: {
    placeholder: 'Password',
  secureTextEntry: true,
},
passwordProps: {
   touched: false,
   scoreLimit: 100,
   variations: {
     digits: /\d/,
     lower: /[a-z]/,
     upper: /[A-Z]/,
     nonWords: /\W/,
   },
   minLength: 5,
   labelVisible: true,
   levels: [
     {
       label: 'Pathetically weak',
       labelColor: '#ff2900',
       activeBarColor: '#ff2900',
     },
     {
       label: 'Extremely weak',
       labelColor: '#ff3e00',
       activeBarColor: '#ff3e00',
     },
     {
       label: 'Very weak',
       labelColor: '#ff5400',
       activeBarColor: '#ff5400',
     },
     {
       label: 'Weak',
       labelColor: '#ff6900',
       activeBarColor: '#ff6900',
     },
     {
       label: 'So-so',
       labelColor: '#f4d744',
       activeBarColor: '#f4d744',
     },
     {
       label: 'Average',
       labelColor: '#f3d331',
       activeBarColor: '#f3d331',
     },
     {
       label: 'Fair',
       labelColor: '#f2cf1f',
       activeBarColor: '#f2cf1f',
     },
     {
       label: 'Strong',
       labelColor: '#14eb6e',
       activeBarColor: '#14eb6e',
     },
     {
       label: 'Very strong',
       labelColor: '#0af56d',
       activeBarColor: '#0af56d',
     },
     {
       label: 'Unbelievably strong',
       labelColor: '#00ff6b',
       activeBarColor: '#00ff6b',
     },
   ],
   wrapperStyle: {},
   labelStyle: {},
   width: deviceWidth - 20,
   
   // Bar
   barContainerStyle: {},
   barStyle: {},
   barColor: '#f1f3f4', 
   
   // Box
   boxContainerStyle: {},
   boxStyle: {},
   boxColor: '#f1f3f4',
   boxSpacing: 2,
   
   // Circle
   outerCircleStyle: {},
   imageWrapperStyle: {},
   imageStyle: {},
   innerCircleStyle: {},
   labelWrapperStyle: {},
   labelNoteStyle: {},
}
Password Score Algorithm
The Password Score calculator is based on this amazing Stackoverflow Post authored by @tm_lv.
Contribution
Questions
Feel free to contact me or create an issue