Как работает шаблон
| Часть | Значение |
|---|---|
(?=.*[a-z]) | Lookahead: хотя бы одна строчная буква в любом месте |
(?=.*[A-Z]) | Хотя бы одна заглавная буква |
(?=.*\d) | Хотя бы одна цифра |
(?=.*[^A-Za-z0-9]) | Хотя бы один специальный символ |
.{8,} | Всего восемь или более символов |
Примеры кода
JavaScript
const re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/;
re.test(value); // true or falsePython
import re
bool(re.fullmatch(r'(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}', value))PHP
preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/', $value) === 1;
Примечания и ограничения
Каждый lookahead проверяет одно правило, не поглощая символов, поэтому правила могут идти в любом порядке. Актуальные рекомендации NIST отдают предпочтение длине (15+ символов) и проверке по утёкшим паролям, а не правилам состава. Рассмотрите правило только по длине в сочетании с индикатором надёжности. Сгенерировать пароль можно с помощью Генератора паролей.
Тестер регулярных выражений
Введите шаблон и смотрите, как совпадения подсвечиваются прямо в тестовом тексте.