Регулярное выражение для пароля (английские буквы, цифры и спец. символы)

^([A-Za-z0-9~`'\&quot;!@#№\?\$%\^&\*\(\)_\-\+\\=<>\|\/\.,:;\[\]{}]{6,25})$

Регулярное выражение для атрибута pattern, поэтому двойные кавычки заменил на &quot; По какой-то причине это регулярное выражение пропускает русские буквы.

Полный код поля: <input id="registration-form-password" name="password" class="form-control form-control" type="password" placeholder="Пароль" minlength="6" maxlength="25" pattern="^([A-Za-z0-9~`'\&quot;!@#№\?\$%\^&\*\(\)_\-\+\\=<>\|\/\.,:;\[\]{}]{6,25})$" required data-container="body" data-toggle="popover" data-placement="right" data-trigger="focus" data-content="Пароль должен содержать минимум 6 символов: английские буквы, цифры и символы ~ ` ' &quot; ! @ # № ? $ % ^ & * ( ) _ - + = &lt; &gt; \ | / . , : ; [ ] { }">

Попробовал регулярку закинуть на https://regex101.com/ Там все работает правильно.

Если проверять регуляркой через js, скорее всего будет все работать, но мне желательно через атрибут pattern. У меня на нем построена валидация.


Ответы (1 шт):

Автор решения: teran

не надо в квадратных скобках ничего экранировать кроме как самих слеша и квадртных скобок. для кавычки используйте 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 >

ну и повторюсь, нет смысла в подобных ограничениях. Сложность пароля они не валидируют никак, а лишь ограничивают пользователя. На бэкенде вы все равно храните хэш, поэтому без разницы что там вообще внутри.

→ Ссылка