Вы можете проверить, установлен ли какой-либо бит младшего порядка. Если это так, посмотрите на нижний порядок оставшихся бит. например:
32bit int - проверка, задан ли какой-либо из первых 16. Если да, проверьте, установлен ли какой-либо из первых 8. если это так, ....
если нет, проверьте, установлен ли какой-либо из верхних 16 ..
По существу это двоичный поиск.
Если вам нужно одно регулярное выражение, попробуйте:
(? =. * \ d) (? =. * [az]) (? =. * [AZ]) (? =. * \ W)
Краткое объяснение:
(? =. * [Az]) // используйте положительный взгляд вперед, чтобы увидеть, (? =. * [AZ]) // используйте положительный взгляд вперед, чтобы увидеть, существует ли хотя бы одно письмо в верхнем регистре (? =. * \ d) // используйте положительный взгляд вперед, чтобы узнать, по крайней мере, существует одна цифра (? =. * \ W]) // используйте положительный взгляд вперед, чтобы увидеть, существует ли хотя бы один неглавный символ
И я согласен с SilentGhost, \ W
может быть немного шире. Я бы заменил его набором символов следующим образом: [- + _! @ # $% ^ & Amp; *.,?]
(не стесняйтесь добавлять больше, конечно!)
Bart Kiers, ваше регулярное выражение имеет пару проблем. Лучший способ сделать это:
(. * [Az]. *) // Для нижних регистров (. * [AZ]. *) // Для верхних случаев (. * \ d. *) // Для цифр
Таким образом вы ищете независимо от того, в начале, в конце или посередине. В вашем случае у меня много проблем со сложными паролями.
Вы можете сопоставить эти три группы отдельно и убедиться, что все они присутствуют. Кроме того, [^ \ w]
кажется слишком широким, но если это то, что вы хотите, вы можете заменить его на \ W
.
. +
на. *
? Я не мог придумать тестовый пример, который терпит неудачу с. *
. В этом контексте они одинаковы? «Ноль или более символов». кажется, все в порядке - просто ищет подтверждение. – Amarghosh 14 October 2009 в 10:49. +
на. *
или даже. {4,}
. – Bart Kiers 14 October 2009 в 11:03^ (? =. * [az]) (? =. * [AZ]) (? =. * \ d) (?!. * [& amp;% $]) . {6} $
– Bart Kiers 21 October 2014 в 09:28