Я новичок в дартс. Я попытался использовать регулярное выражение для проверки длины строки. Но это не работает, как ожидалось. Фигурные скобки {} указывают диапазон длины в регулярном выражении. Использование {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");
}
Выход: Идеальный пароль
Мы также можем использовать некоторые другие решения. Но я сомневаюсь, что проверка минимальной длины работает, почему не работает максимальная проверка? Пожалуйста, помогите мне понять проблему.
Просто скажу, для протокола, что password.length >= 12 намного эффективнее, чем RegExp(r'.{12,}').hasMatch(password). Не используйте регулярные выражения там, где обычный код работает так же хорошо.
Я отредактировал код @GicuAftene. Удалено условие else if (!RegExp(r'.{12,}').hasMatch(password)). Но все же он проверяет минимальную длину, а не максимальную. это мое сомнение.
измените регулярное выражение на это (r'^.{12,15}$'), что буквально означает, что подстрока, сгенерированная с 12-го по 15-й символ, должна быть в конце исходной строки.
поэтому, если в пароле 16 и более символов, он не совпадает, а если в нем 11 или меньше символов, он также не совпадает
@GicuAftene Отлично. Работает нормально
Как вы просили, я разместил это как ответ
Основываясь на тексте этого сопоставителя: {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');
}
На самом деле ваш код работает .... я попробовал его прямо сейчас в браузере Dart, и все условия работают хорошо ... На самом деле этот (
else if (!RegExp(r'.{12,}').hasMatch(password))) никогда не будет совпадать, потому что проверка, не находится ли он между 12 и 15, имеет значение.