Регулярное выражение Dart Проверка длины

Я новичок в дартс. Я попытался использовать регулярное выражение для проверки длины строки. Но это не работает, как ожидалось. Фигурные скобки {} указывают диапазон длины в регулярном выражении. Использование {12} означает длину ровно 12, {12,15} означает длину от 12 до 15 символов, а {12,} означает длину не менее 12 без верхнего предела. Поскольку {12,} следует за . персонаж, допускающий 12 или более любых персонажей. Я сделал исходя из этого.

        const password = r"dsjRK@#RDsk34$SwedfQWDF";
        if (!password.contains(RegExp(r'[a-z]'))) {
          print('password should  contain atleast lower case character');
        } else if (!RegExp(r'[A-Z]').hasMatch(password)) {
          print('password should contain atleast lower case character');
        } else if (!RegExp(r'[0-9]').hasMatch(password)) {
          print('password should contain atleast one digits');
        } else if (!RegExp(r'[$@#%&*^!]').hasMatch(password)) {
          print('password should contain atleast one special charatcer');
        } else if (!RegExp(r'.{12,15}').hasMatch(password)) {
          print('password atleast 12 max 15 digits');
        }  else {
          print("Perfect Password");
       }

Выход: Идеальный пароль

Мы также можем использовать некоторые другие решения. Но я сомневаюсь, что проверка минимальной длины работает, почему не работает максимальная проверка? Пожалуйста, помогите мне понять проблему.

На самом деле ваш код работает .... я попробовал его прямо сейчас в браузере Dart, и все условия работают хорошо ... На самом деле этот ( else if (!RegExp(r'.{12,}').hasMatch(password)) ) никогда не будет совпадать, потому что проверка, не находится ли он между 12 и 15, имеет значение.

Gicu Aftene 23.11.2022 13:00

Просто скажу, для протокола, что password.length >= 12 намного эффективнее, чем RegExp(r'.{12,}').hasMatch(password). Не используйте регулярные выражения там, где обычный код работает так же хорошо.

lrn 23.11.2022 13:36

Я отредактировал код @GicuAftene. Удалено условие else if (!RegExp(r'.{12,}').hasMatch(password)). Но все же он проверяет минимальную длину, а не максимальную. это мое сомнение.

Saranya Subramanian 24.11.2022 06:35

измените регулярное выражение на это (r'^.{12,15}$'), что буквально означает, что подстрока, сгенерированная с 12-го по 15-й символ, должна быть в конце исходной строки.

Gicu Aftene 24.11.2022 10:09

поэтому, если в пароле 16 и более символов, он не совпадает, а если в нем 11 или меньше символов, он также не совпадает

Gicu Aftene 24.11.2022 10:15

@GicuAftene Отлично. Работает нормально

Saranya Subramanian 24.11.2022 12:43

Как вы просили, я разместил это как ответ

Gicu Aftene 24.11.2022 12:47
0
7
111
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Основываясь на тексте этого сопоставителя: {12, 15} кажется, что вы хотите, чтобы было разрешено не более 15 символов. Поэтому измените это, если вы хотите иметь отдельные распечатки для разных случаев:

  const password = r"dsjRK@#RDsk34$SwedfQWDF";
  if (!RegExp(r'[a-z]').hasMatch(password)) {
    print('password should contain at least one lower case character');
  } else if (!RegExp(r'[A-Z]').hasMatch(password)) {
    print('password should contain at least lower case character');
  } else if (!RegExp(r'[0-9]').hasMatch(password)) {
    print('password should contain at least one digits');
  } else if (!RegExp(r'[$@#%&*^!]').hasMatch(password)) {
    print('password should contain at least one special charatcer');
  } else if (password.length < 12) {
    print('password at least 12 characters');
  } else if (password.length > 15) {
    print('password should have max 15 characters');
  } else {
    print("Perfect Password");
  }

Я также изменил первый оператор if, чтобы он соответствовал остальным...

Ответ принят как подходящий

Измените регулярное выражение на это r'^.{12,15}$'.

Это буквально означает, что подстрока, сгенерированная с 12-го по 15-й символ, должна быть в конце исходной строки.

else if (!RegExp(r'^.{12,15}$').hasMatch(password){
     print('password atleast 12 max 15 digits');
}

Другие вопросы по теме