Миним предел не может быть удалена путем удаления лимитирующим (связанно) квантор {10,}
, вам нужно заменить его *
(разрешить пустую строку) или +
(требовать по меньшей мере, 1):
expect ^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9#[email protected]$%^&*-]).*$
или просто (с expect
не требует полного совпадения строки):
expect ^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9#[email protected]$%^&*-])
Если вам необходимо ограничить символы для тех, кто внутри lookaheads, просто замените .*
с [a-zA-Z0-9#[email protected]$%^&*-]*
:
expect ^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9#[email protected]$%^&*-])[a-zA-Z0-9#[email protected]$%^&*-]*$
^^^^^^^^^^^^^^^^^^^^^
Я бы также использовать жадные кванторы последовательным образом в регулярных выражениях Tcl, хотя это не имеет никакого значения в текущий шаблон.
Детали:
^
- начало строки
(?=.*[A-Z])
- после любых 0+ символов должно быть в верхнем регистре ASCII буква
(?=.*[a-z])
- после любых 0+ символов должно быть строчная ASCII-буква
(?=.*[0-9#[email protected]$%^&*-])
- после любых символов 0+ должна быть цифра ASCII или любой из специальных символов, определенных в символе класс
.*
- любые 0+ символов, максимально возможное до
$
- конец строки.
В (?=...)
конструкции называются положительные lookaheads, что «стоять на своем», т.е. не продвигать индекс регулярных выражений, когда они выполняются. Таким образом, 3 вида будут выполнять проверку один за другим, и как только один из них вернет false, весь матч будет провален.
Примечание: во избежание ненужного обратного отслеживания с помощью .*
вы можете применить принцип контраста (т.используя соответствующие отрицательные классы символов внутри в lookaheads):
^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9#[email protected]$%^&*-]*[0-9#?!@$%^&*-])[a-zA-Z0-9#[email protected]$%^&*-]*$
[^A-Z]*
будет соответствовать один или несколько отличных заглавных букв ASCII символов, [^a-z]*
будет соответствовать один или несколько отличных строчных букв ASCII символов и т.д. .*
выхватывает сначала целую строку, а затем назад, проверяя, может ли следующий подшаблон соответствовать. Таким образом, классы с отрицанием символов намного эффективнее и быстрее находят или не дают результата.
Итак, вы просто спросите, как удалить минимальный лимит? Замените '{10,}' на '*'. BTW, регулярное выражение будет проверять * хотя бы одно число ** ИЛИ ** "! -% #" *. Что вы подразумеваете под * необязательным * в * по крайней мере одним номером и необязательным?! -% # "*? Вы можете просто удалить их из списка, если вы их не требуете. –
@Wiktor На самом деле мне нужна работа всего кода ... и ваше предложение работало для снятия ограничения ... Спасибо – joe
@Wiktor, который был опечаткой ... Отредактировано – joe