/** * 密码强度验证组件 * @邠心vbe on 2023/02/01 */ import React from 'react'; import { View, Text, StyleSheet } from 'react-native'; const getStyle = (strength, num) => { if (strength >= num) { return {...styles.strengthItem, backgroundColor: colorAccent}; } else { return styles.strengthItem; } } const applyStrength = (text, version, back) => { var strength = 0; if (text.length >= 8) { strength += 1; } if (/\d{1,}/.test(text)) { strength += 1; } if (version == 1 || version == 2) { if (/[a-z]{1,}/.test(text)) { strength += 1; } if (/[A-Z]{1,}/.test(text)) { strength += 1; } } else { if (/[A-z]{1,}/.test(text)) { strength += 1; } } if (version == 1 || version == 3) { if (/\W{1,}/.test(text)) { strength += 1; } } back(strength); } /** * 密码强度组件 * @param {*} param0 动态强度 * @returns 组件 */ const StrengthView = ({version, strength}) => ( Password Strength <> { version < 4 && <> { version < 2 && } } Your Password Must Have: - 8 or more characters { (version == 1 || version == 2) && - upper and lower case letters } { (version == 1 || version == 3) ? - at least one number and one special character : - at least one number } ) export default { /** * 最严格的密码强度组件(5) */ V1: { VIEW: (props) => , maxStrength: 5, apply: (text, back) => applyStrength(text, 1, back) }, /** * 去掉特殊符号限制的密码强度组件(4) */ V2: { VIEW: (props) => , maxStrength: 4, apply: (text, back) => applyStrength(text, 2, back) }, /** * 去掉大小写字母限制的密码强度组件(4) */ V3: { VIEW: (props) => , maxStrength: 4, apply: (text, back) => applyStrength(text, 3, back) }, /** * 去掉大小写字母和特殊符号限制的密码强度组件(3) */ V4: { VIEW: (props) => , maxStrength: 3, apply: (text, back) => applyStrength(text, 4, back) }, } const styles = StyleSheet.create({ strengthView: { marginTop: -4, alignItems: 'center', paddingBottom: 4, flexDirection: 'row' }, labelText: { fontSize:12, paddingRight: 4, color: textPrimary }, passwordRole: { color: '#999', fontSize: 10, lineHeight: 13 }, strengthItem: { width: 14, height: 2.5, marginLeft: 8, borderRadius: 3, backgroundColor: '#CCC' }, })