✨Validation - Ki-Kobayashi/flutter_wiki GitHub Wiki

🟩フォームにバリデーションを指定する

🟡 ValidationUtilを作成

import 'package:email_validator/email_validator.dart';
import 'package:sprintf/sprintf.dart';

class FormValidation {

  /// 表示名バリデーション
  static String? nickNameValidator(String? value) {
    if (isNoInput(value)) {
      return sprintf(
          StringConsts.errTextEmplty, [StringConsts.labelNickName]);
    }
    // 1字以上、8字以下の文字列(?,=,+,*,\,(,{,[ は使用不可)
    final regexLength = RegExp(r'^.{1,20}$');
    final regexSimbol = RegExp(r'^[^\?=\+\*\\({\[]+$');
    if (!regexLength.hasMatch(value!)) {
      return StringConsts.errTextNickNameLength;
    }
    if (!regexSimbol.hasMatch(value)) {
      return StringConsts.errTextForbiddenSimbols;
    }
    return null;
  }

  /// メールアドレスバリデーション
  static String? mailAddressValidator({
    required String? email,
  }) {
    if (isNoInput(email)) {
      return sprintf(
          StringConsts.errTextEmplty, [StringConsts.labelMail]);
    }
    // メールアドレスが有効か
    if (!EmailValidator.validate(email!)) {
      return StringConsts.errTextMailAddress;
    }
    return null;
  }

  /// バリデーション:パスワード
  static String? passwordValidator({
    required String? password,
  }) {
    if (password == null || password.isEmpty) {
      return sprintf(
          StringConsts.errTextEmplty, [StringConsts.labelPassword]);
    }

    // 8文字以上36文字以内か(32字でも良さそう)
    final regexPwLength = RegExp(r'^.{8,36}$');
    if (!regexPwLength.hasMatch(password)) {
      return StringConsts.errTextPasswordLength;
    }

    final errList = <String>[];

    // 半角英数字・指定記号以外が含まれて"いない"か
    final regexPw =
        RegExp(r'''^[a-zA-Z\d@\[\]\\;:,\./_!"'#$%&\(\)=~|`+*{}<>?\-^]+$''');
    if (!regexPw.hasMatch(password)) {
      errList.add(StringConsts.errTextPasswordForbidden);
    }
    // 半角数字(1文字以上)が含まれているか
    final regexPwNumber = RegExp(r'\d');
    if (!regexPwNumber.hasMatch(password)) {
      errList.add(StringConsts.errTextPasswordNumber);
    }
    // 半角英字(1文字以上)が含まれているか
    final regexPwAlphabet = RegExp(r'[a-zA-Z]');
    if (!regexPwAlphabet.hasMatch(password)) {
      errList.add(StringConsts.errTextPasswordAlphabet);
    }
    // 指定半角記号(1文字以上)が含まれているか
    final regexPwSymbols =
        RegExp(r'''[@\[\]\\;:,\./_!"'#$%&\(\)=~|`+*{}<>?\-^]''');
    if (!regexPwSymbols.hasMatch(password)) {
      errList.add(StringConsts.errTextPasswordSymbol);
    }
    if (errList.isNotEmpty) {
      return errList.join('\n');
    }

    return null;
  }

  /// バリデーション:ログイン用パスワード
  static String? passwordValidatorForLogin({
    required String? password,
  }) {
    if (isNoInput(password)) {
      return sprintf(
          StringConsts.errTextEmplty, [StringConsts.labelPassword]);
    }
    return null;
  }

  /// 未入力かどうか
  static bool isNoInput(String? value) =>
      value == null || value.trim().isEmpty ? true : false;
}

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

⚠️ **GitHub.com Fallback** ⚠️