Regex для пароля должен содержать не менее восьми символов, хотя бы одну цифру, а также строчные и прописные буквы и специальные символы

Я хочу, чтобы регулярное выражение проверяло это:

Пароль содержит не менее восьми символов, включая хотя бы одну цифру, и включает как строчные, так и прописные буквы и специальные символы, например #, ?, !.

Это не может быть ваш старый пароль или содержать ваше имя пользователя, "пароль", или "имя сайта".

А вот мое выражение валидации для восьми символов, включая одну заглавную букву, одну строчную букву и одну цифру или специальный символ.

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Как я могу написать его для пароль должен состоять из восьми символов, включая одну заглавную букву, один специальный символ и буквенно-цифровые символы?

Комментарии к вопросу (4)

Минимум восемь символов, по крайней мере, одна буква и одна цифра:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

Минимум восемь символов, как минимум одна буква, одна цифра и один специальный символ:

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$"

Минимум восемь символов, как минимум одна заглавная буква, одна строчная буква и одна цифра:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

Минимум восемь символов, как минимум одна заглавная буква, одна строчная буква, одна цифра и один специальный символ:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"

Минимум восемь и максимум 10 символов, как минимум одна заглавная буква, одна строчная буква, одна цифра и один специальный символ:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"
Комментарии (22)

Вы можете использовать этот regex с несколькими lookahead assertions (conditions):

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

Этот регекс будет применять эти правила:

  • По крайней мере один верхний регистр английской буквы, (?=.*?[A-Z]).
  • Хотя бы одна строчная английская буква, (?=.*?[a-z]).
  • По крайней мере одна цифра, (?=.*?[0-9]).
  • Хотя бы один специальный символ, (?=.*?[#?!@$%^&*-]).
  • Минимум восемь в длину .{8,} (с якорями)
Комментарии (36)

Регулярные выражения Дон'Т есть и оператор, так что'ы довольно трудно написать регулярное выражение, которое соответствует действительной пароли, когда действия определяется чем-то и чем-то еще и что-то еще...

Но, регулярные выражения не имеют или оператора, поэтому просто применить DeMorgan'ы Теорема, и написать регулярное выражение, которое соответствует неверный пароль:

Что-нибудь с менее чем восьми символов или ничего нет числа или ничего не прописные или или ничего не строчные или что угодно без всяких специальных символов.

Так:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

Если что-то совпадет, то это'ы неверный пароль.

Комментарии (10)

Небольшое улучшение для ответа @anubhava': Поскольку специальные символы ограничены теми, что есть в клавиатуре, используйте это для любого специального символа:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

Этот regex будет применять эти правила:

  • хотя бы одна английская буква в верхнем регистре
  • Хотя бы одна строчная английская буква
  • Хотя бы одна цифра
  • Хотя бы один специальный символ
  • Минимум восемь в длину
Комментарии (3)

У меня были некоторые трудности после самый популярный ответ на мои обстоятельства. Например, моя проверка была не с символов, таких как ; или [. Я не был заинтересован в белый список моих особых символов, так что вместо этого я использовала `[^\ж\ы] в качестве тест - проще говоря - матч без буквенных символов (в том числе цифровые) и пробельные символы. Подводя итог, вот что работает для меня...

  • по крайней мере, 8 символов
  • по крайней мере, 1 числовой символ
  • по крайней мере, 1 строчной буквы
  • по крайней мере, 1 прописные буквы
  • по крайней мере, 1 специальный символ

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

[JSFiddle ссылку][1] - Простое приложение, охватывающих различные случаи

Комментарии (4)

А более "универсальный" по версии(?), позволяя не английскими буквами, как специальные символы.

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

в

var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;

  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });

в

Комментарии (0)

Импортировать файл JavaScript jquery.validate.min.js.

Вы можете использовать этот метод:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. По крайней мере одна прописная английская буква
  2. Как минимум одну строчную английскую букву
  3. По крайней мере одна цифра
  4. По крайней мере один специальный символ
Комментарии (0)

Попробуйте это:

  1. Минимум шесть символов
  2. По крайней мере один символ верхнего регистра
  3. По крайней мере, один строчный символ
  4. По крайней мере один специальный символ

Выражение:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

Опционные Специальные Символы:

  1. По крайней мере один специальный символ
  2. По крайней мере один номер
  3. Специальные символы являются необязательными
  4. Минимум шесть символов и не более 16 символов

Выражение:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

Если минимальное и максимальное состояние не требуется, то удалить .{6, 16}

  • 6 минимальное ограничение на количество символов
  • 20 максимальное ограничение на количество символов
  • ?= означает выражение матч
Комментарии (1)

Я хотел ответить в Питер Мортенсен, но я Дон'т иметь достаточно высокую репутацию.

Его выражения являются идеально подходит для каждой из указанных минимальных требований. Проблема с его выражениями, что Дон't, требуют наличия специальных символов заключается в том, что они не'т позвольте специальных символов, поэтому они также обеспечивают максимальные требования, которые я не'т верить ОП просил. Как правило, вы хотите разрешить пользователям сделать свой пароль как сильна, как они хотят; зачем ограничивать надежные пароли?

Так, в своем "минимум восемь символов, хотя бы одну букву и одну цифру" по выражению:

^(?=.*[А-Яа-я])(?=.*\д)[а-Яа-я\Д]{8,}$

обеспечивает минимальные требования, но остальные символы могут только быть буквы и цифры. Позволяет (но не требует) специальных символов, вы должны использовать что-то вроде:

^(?=.*[А-Яа-я])(?=.*\д).{8,}$, чтобы разрешить любые символы

или

^(?=.*[А-Яа-я])(?=.*\д)[а-Яа-я\д$@$!%*#?&]{8,}$, чтобы разрешить специальные символы

Кроме того, что "минимум восемь символов, хотя бы одну заглавную букву, одну строчную букву и одну цифру:"по

^(?=.*[а-Z])(?=.*[А-Z])(?=.*\д)[а-Яа-я\Д]{8,}$

отвечает, что минимальное требование, но только позволяет буквы и цифры. Использование:

^(?=.*[а-Z])(?=.*[А-Z])(?=.*\д).{8,}$, чтобы разрешить любые символы

или

^(?=.*[а-Z])(?=.*[А-Z])(?=.*\д)[а-Яа-я\д$@$!%*?&]{8,}, чтобы разрешить специальные символы.

Комментарии (2)

Прямо не отвечая на вопрос, но это действительно должны быть регулярное выражение?

Я использовал, чтобы сделать много Perl и привык решать проблемы с регулярными выражениями. Однако, когда они становятся более сложными со всеми посмотрите-опередила и другие причуды, вам нужно написать десятки модульных тестов, чтобы убить всех этих маленьких ошибок.

Кроме того, регулярное выражение представляет собой, как правило, в несколько раз медленнее, чем императивное или функциональное решение.

Например, следующий (не очень ФП) функция Scala решает первоначальный вопрос примерно в три раза быстрее, чем регулярное выражение из самых популярных ответа. Что она делает, это и так понятно, что вы Дон'т нужна модульных тестов на всех:

def validatePassword(password: String): Boolean = {
  if (password.length < 8)
    return false

  var lower = false
  var upper = false
  var numbers = false
  var special = false

  password.foreach { c =>
    if (c.isDigit)       numbers = true
    else if (c.isLower)  lower = true
    else if (c.isUpper)  upper = true
    else                 special = true
  }

  lower && upper && numbers && special
}
Комментарии (0)
Use the following Regex to satisfy the below conditions:

Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.

Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/    
Комментарии (5)

По вашим параметрам эта модель должна работать нормально. Попробуйте это,

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

Просто создайте строковую переменную, присвоить шаблон, и создать логический метод, который возвращает true, если шаблон правильно, иначе false.

Образец:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"

private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}
Комментарии (0)

@ClasG уже предложил:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

но он не принимает _(подчеркивание) как специальный символ (например. Aa12345_).

Улучшенная одно:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$
Комментарии (0)

Я'вэ нашел много проблем, поэтому я сделал мои собственные.

Вот это все она'ы славы, с тестами:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/DCRR65/4/tests

Вещи, которые нужно посмотреть:

  1. не'т использовать \ж, потому что это содержит_`, что я'м тестирования.
  2. Я'вэ было много неприятностей одинаковых символов, без согласования конца линии.
  3. Не'т указать символы, в частности, это еще и потому, что разные регионы могут иметь различные символы на клавиатуре, которые они хотят использовать.
Комментарии (1)
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
Комментарии (1)

Просто мы можем сделать это с помощью HTML5.

Использовать ниже код в атрибут pattern,

pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Она будет прекрасно работать.

Комментарии (0)

Можно использовать под шаблон регулярного выражения для проверки пароля, соответствует ли она вашим ожиданиям или нет.

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})
Комментарии (0)

использовать следующее регулярное выражение, чтобы удовлетворить следующим условиям:

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

регулярное выражение: ^(?=.*\д)(?=.*[#$@!%&усилителей;*?])[А-Яа-я\Г#$@!%&пож;*?]{8,}$

можно протестировать онлайн: https://regex101.com

Комментарии (0)

Попробуйте это:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

Это регулярное выражение работает для меня идеально.

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}
Комментарии (0)

Демо:

в

function password_check() {
  pass = document.getElementById("password").value;
  console.log(pass);
  regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
  if (regex.exec(pass) == null) {
    alert('invalid password!')
  }
  else {
    console.log("valid");
  }
}
<input type="text" id="password" value="Sample@1">
<input type="button" id="submit" onclick="password_check()" value="submit">

в

Комментарии (0)