validators.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // 表单校验工具函数
  2. /// 邮箱格式校验
  3. String? validateEmail(String? value) {
  4. if (value == null || value.isEmpty) return '请输入邮箱地址';
  5. final emailRegex = RegExp(r'^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$');
  6. if (!emailRegex.hasMatch(value)) return '邮箱格式不正确';
  7. return null;
  8. }
  9. /// 密码校验(最少 6 位)
  10. String? validatePassword(String? value) {
  11. if (value == null || value.isEmpty) return '请输入密码';
  12. if (value.length < 6) return '密码至少 6 位';
  13. return null;
  14. }
  15. /// 确认密码校验
  16. String? validateConfirmPassword(String? value, String original) {
  17. if (value == null || value.isEmpty) return '请确认密码';
  18. if (value != original) return '两次密码不一致';
  19. return null;
  20. }
  21. /// 金额校验
  22. String? validateAmount(String? value, {double? max}) {
  23. if (value == null || value.isEmpty) return '请输入金额';
  24. final amount = double.tryParse(value);
  25. if (amount == null || amount <= 0) return '请输入有效金额';
  26. if (max != null && amount > max) return '超出可用余额';
  27. return null;
  28. }
  29. /// 加密地址校验(基础非空校验)
  30. String? validateAddress(String? value) {
  31. if (value == null || value.isEmpty) return '请输入提币地址';
  32. if (value.length < 20) return '地址格式不正确';
  33. return null;
  34. }
  35. /// 密码强度(0-3)
  36. int passwordStrength(String password) {
  37. if (password.isEmpty) return 0;
  38. int score = 0;
  39. if (password.length >= 8) score++;
  40. if (RegExp(r'[A-Z]').hasMatch(password)) score++;
  41. if (RegExp(r'[0-9]').hasMatch(password)) score++;
  42. if (RegExp(r'[!@#\$%^&*]').hasMatch(password)) score++;
  43. return score.clamp(0, 3);
  44. }