Иногда мы не можем влиять на спецификации и должны писать реализацию независимо от того, когда какая-то древняя бэк-офисная система должна быть подключена через Интернет, но имеет определенные ограничения на ввод или просто потому, что ваш начальник просит вас об этом.
EDIT: удалено регулярное выражение, основанное на исходном регулярном выражении запроса.
изменил исходный код, чтобы он соответствовал вашему описанию, так как он не работал:
РЕДАКТИРОВАТЬ: Q. затем был обновлен, чтобы отразить другую версию. Есть различия, которые я объясню ниже:
Моя версия: два или более \W
и \d
могут повторяться друг другом, но не могут появляться рядом друг с другом (это было мое неверное предположение), я исправил его для длины> 7, что немного больше Эффективно размещать как типичное выражение "хватай все".
^(?!.*((\S)\1|\s))(?=.*(\d.+){2,})(?=.*(\W.+){2,}).{8,}
Новая версия в оригинальном вопросе: два или более \W
и \d
могут появляться рядом друг с другом. Эта версия в настоящее время поддерживает длину> = 6, а не длину> 7, как объясняется в тексте.
Текущий ответ, исправленный, должен быть примерно таким, который принимает обновленный q., Мои комментарии по длине> 7 и оптимизации, тогда он выглядит так: ^(?!.*((\S)\1|\s))(?=(.*\d){2,})(?=(.*\W){2,}).{8,}
.
Обновление: Ваш исходный код не работает, поэтому я немного его изменил
Обновление: обновленный ответ для отражения изменений в вопросе, пробелы больше не разрешены