Регулярное выражение для пароля (английские буквы, цифры и спец. символы)
^([A-Za-z0-9~`'\"!@#№\?\$%\^&\*\(\)_\-\+\\=<>\|\/\.,:;\[\]{}]{6,25})$
Регулярное выражение для атрибута pattern, поэтому двойные кавычки заменил на " По какой-то причине это регулярное выражение пропускает русские буквы.
Полный код поля:
<input id="registration-form-password" name="password" class="form-control form-control" type="password" placeholder="Пароль" minlength="6" maxlength="25" pattern="^([A-Za-z0-9~`'\"!@#№\?\$%\^&\*\(\)_\-\+\\=<>\|\/\.,:;\[\]{}]{6,25})$" required data-container="body" data-toggle="popover" data-placement="right" data-trigger="focus" data-content="Пароль должен содержать минимум 6 символов: английские буквы, цифры и символы ~ ` ' " ! @ # № ? $ % ^ & * ( ) _ - + = < > \ | / . , : ; [ ] { }">
Попробовал регулярку закинуть на https://regex101.com/ Там все работает правильно.
Если проверять регуляркой через js, скорее всего будет все работать, но мне желательно через атрибут pattern. У меня на нем построена валидация.
Ответы (1 шт):
не надо в квадратных скобках ничего экранировать кроме как самих слеша и квадртных скобок. для кавычки используйте hex-нотацию \x22. Минус пишите в самом конце, т.к. используется для указания диапазонов. внешние скобки тоже ни к чему. Некоторые классы символов, можно сократить, например, a-zA-Z0-9_ до \w
<input id name="password" class="form-control form-control"
type="text"
placeholder="Пароль"
minlength="6"
maxlength="25"
pattern="^[\w~'`!@#№?$%^&*()=+<>|/\\.,:;\[\]{} \x22-]{6,25}$" required >
ну и повторюсь, нет смысла в подобных ограничениях. Сложность пароля они не валидируют никак, а лишь ограничивают пользователя. На бэкенде вы все равно храните хэш, поэтому без разницы что там вообще внутри.