import React, { FC, useState, useEffect } from 'react'; import { View, Text } from 'react-native'; import { PasswordInput, Field, Space } from '@xrnjs/ui'; import Card from '_global/Card'; import styles from './style'; interface ValidationRule { label: string; validator: (password: string) => boolean; type: 'success' | 'error' | 'warning'; } const ValidationUsage: FC = () => { const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [validationResults, setValidationResults] = useState( [] ); const validationRules: ValidationRule[] = [ { label: '长度至少8位', validator: (pwd) => pwd.length >= 8, type: 'error', }, { label: '包含大写字母', validator: (pwd) => /[A-Z]/.test(pwd), type: 'warning', }, { label: '包含小写字母', validator: (pwd) => /[a-z]/.test(pwd), type: 'warning', }, { label: '包含数字', validator: (pwd) => /\d/.test(pwd), type: 'warning', }, { label: '包含特殊字符', validator: (pwd) => /[!@#$%^&*(),.?":{}|<>]/.test(pwd), type: 'success', }, ]; useEffect(() => { const results = validationRules.map((rule) => ({ ...rule, type: rule.validator(password) ? 'success' : rule.type, })); setValidationResults(results); }, [password]); const getValidationIcon = (type: string) => { switch (type) { case 'success': return styles.validationSuccess; case 'error': return styles.validationError; case 'warning': return styles.validationWarning; default: return styles.validationError; } }; const isPasswordMatch = password && confirmPassword && password === confirmPassword; const showColor = validationResults.filter((r) => r.type === 'success').length >= 4 ? '#52c41a' : validationResults.filter((r) => r.type === 'success').length >= 2 ? '#faad14' : '#ff4d4f'; return ( 结合验证规则,实时检查密码强度和确认密码匹配。 {validationResults.map((rule, index) => ( {rule.label} ))} {confirmPassword ? ( {isPasswordMatch ? '✓ 密码匹配' : '✗ 密码不匹配'} ) : null} 强度评估 通过规则: {validationResults.filter((r) => r.type === 'success').length} /{' '} {validationResults.length} 强度等级: {validationResults.filter((r) => r.type === 'success').length >= 4 ? '强' : validationResults.filter((r) => r.type === 'success') .length >= 2 ? '中' : '弱'} ); }; export default ValidationUsage;