Оценка строки по шаблону с помощью RegExp в Flutter - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь оценить строку по заданному списку параметров с помощью RegExp во Flutter. Например, строка должна содержать не менее:

  • Одна заглавная буква
  • Одна строчная буква
  • Одно число от 0-9
  • Один специальный символ, такой как $ или!

Это в основном для поля ввода пароля приложения. Я настроил все, сначала используя validateStructure следующим образом:

abstract class PasswordValidator {
  bool validateStructure(String value);
}

Затем я использовал функцию RegExp следующим образом:

class PasswordValidatorSpecial implements PasswordValidator {
  bool validateStructure(String value) {
    String pattern =
        r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~£]).{8,}$';
    RegExp regEx = new RegExp(pattern);
    return regEx.hasMatch(value);
  }
}

Это работает хорошо, в некотором смысле, когда я передаю строку / пароль через него, он говорит мне, если хотя бы один из критериев не удовлетворен. Однако я хотел бы, чтобы выходные данные были более точными c, сообщая мне, какой из этих критериев не выполняется.

Например, если бы в пароле было все, кроме числа (от 0 до 9), я бы хотел получить вывод, в котором конкретно сказано, что число отсутствует, но все остальное присутствует.

Как мне адаптировать мой код, чтобы я мог это сделать? Возможно, я подумал, используя условное выражение «если», хотя я не знаю, как это будет работать. Спасибо!

1 Ответ

1 голос
/ 17 февраля 2020

Правильно, вы можете использовать RegExr , чтобы проверить свой RegExp, отделить каждую часть и использовать их отдельно, чтобы иметь пользовательскую ошибку. Кроме того, вместо возврата значения bool вы можете вернуть строковое значение, например следующую функцию:

String validateStructure(String value) {
    String patternUpperCaseCharacters = r'^(?=.*?[A-Z])';
    String patternLowerCaseCharacters = r'^(?=.*?[a-z])';
    String patternNumbers = r'^(?=.*?[0-9])';
    String patternSpecialCharacters = r'^(?=.*?[!@#\$&*~£])';

    RegExp regEx = new RegExp(patternUpperCaseCharacters);
    if (regEx.hasMatch(value)) {
      regEx = new RegExp(patternLowerCaseCharacters);
      if (regEx.hasMatch(value)) {
        return "More errors";
      } else {
        return "You need at least one lowercase letter";
      }
    } else {
      return "You need at least one capital letter";
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...