Я хочу, чтобы регулярное выражение проверяло это:
Пароль содержит не менее восьми символов, включая хотя бы одну цифру, и включает как строчные, так и прописные буквы и специальные символы, например #
, ?
, !
.
Это не может быть ваш старый пароль или содержать ваше имя пользователя, "пароль"
, или "имя сайта"
.
А вот мое выражение валидации для восьми символов, включая одну заглавную букву, одну строчную букву и одну цифру или специальный символ.
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
Как я могу написать его для пароль должен состоять из восьми символов, включая одну заглавную букву, один специальный символ и буквенно-цифровые символы?
Минимум восемь символов, по крайней мере, одна буква и одна цифра:
"^(?=.*[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}$"
Вы можете использовать этот regex с несколькими lookahead assertions (conditions):
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
Этот регекс будет применять эти правила:
(?=.*?[A-Z])
.(?=.*?[a-z])
.(?=.*?[0-9])
.(?=.*?[#?!@$%^&*-])
..{8,}
(с якорями)Регулярные выражения Дон'Т есть и оператор, так что'ы довольно трудно написать регулярное выражение, которое соответствует действительной пароли, когда действия определяется чем-то и чем-то еще и что-то еще...
Но, регулярные выражения не имеют или оператора, поэтому просто применить DeMorgan'ы Теорема, и написать регулярное выражение, которое соответствует неверный пароль:
Что-нибудь с менее чем восьми символов или ничего нет числа или ничего не прописные или или ничего не строчные или что угодно без всяких специальных символов.
Так:
^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$
Если что-то совпадет, то это'ы неверный пароль.
Небольшое улучшение для ответа @anubhava': Поскольку специальные символы ограничены теми, что есть в клавиатуре, используйте это для любого специального символа:
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
Этот regex будет применять эти правила:
У меня были некоторые трудности после самый популярный ответ на мои обстоятельства. Например, моя проверка была не с символов, таких как ;
или [
. Я не был заинтересован в белый список моих особых символов, так что вместо этого я использовала `[^\ж\ы] в качестве тест - проще говоря - матч без буквенных символов (в том числе цифровые) и пробельные символы. Подводя итог, вот что работает для меня...
8
символов1
числовой символ1
строчной буквы 1
прописные буквы 1
специальный символ/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/
[JSFiddle ссылку][1] - Простое приложение, охватывающих различные случаи
А более "универсальный" по версии(?), позволяя не английскими буквами, как специальные символы.
^(?=\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/>');
});
в
Импортировать файл 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)
});
Попробуйте это:
Выражение:
"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"
Опционные Специальные Символы:
Выражение:
"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"
Если минимальное и максимальное состояние не требуется, то удалить .{6, 16}
Я хотел ответить в Питер Мортенсен, но я Дон'т иметь достаточно высокую репутацию.
Его выражения являются идеально подходит для каждой из указанных минимальных требований. Проблема с его выражениями, что Дон't, требуют наличия специальных символов заключается в том, что они не'т позвольте специальных символов, поэтому они также обеспечивают максимальные требования, которые я не'т верить ОП просил. Как правило, вы хотите разрешить пользователям сделать свой пароль как сильна, как они хотят; зачем ограничивать надежные пароли?
Так, в своем "минимум восемь символов, хотя бы одну букву и одну цифру" по выражению:
^(?=.*[А-Яа-я])(?=.*\д)[а-Яа-я\Д]{8,}$
обеспечивает минимальные требования, но остальные символы могут только быть буквы и цифры. Позволяет (но не требует) специальных символов, вы должны использовать что-то вроде:
^(?=.*[А-Яа-я])(?=.*\д).{8,}$
, чтобы разрешить любые символы
или
^(?=.*[А-Яа-я])(?=.*\д)[а-Яа-я\д$@$!%*#?&]{8,}$
, чтобы разрешить специальные символы
Кроме того, что "минимум восемь символов, хотя бы одну заглавную букву, одну строчную букву и одну цифру:"по
^(?=.*[а-Z])(?=.*[А-Z])(?=.*\д)[а-Яа-я\Д]{8,}$
отвечает, что минимальное требование, но только позволяет буквы и цифры. Использование:
^(?=.*[а-Z])(?=.*[А-Z])(?=.*\д).{8,}$
, чтобы разрешить любые символы
или
^(?=.*[а-Z])(?=.*[А-Z])(?=.*\д)[а-Яа-я\д$@$!%*?&]{8,}
, чтобы разрешить специальные символы.
Прямо не отвечая на вопрос, но это действительно должны быть регулярное выражение?
Я использовал, чтобы сделать много 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
}
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}$/
По вашим параметрам эта модель должна работать нормально. Попробуйте это,
^(?=(.*\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);
}
@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,}$
Я'вэ нашел много проблем, поэтому я сделал мои собственные.
Вот это все она'ы славы, с тестами:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$
https://regex101.com/r/DCRR65/4/tests
Вещи, которые нужно посмотреть:
\ж, потому что это содержит
_`, что я'м тестирования.(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
Можно использовать под шаблон регулярного выражения для проверки пароля, соответствует ли она вашим ожиданиям или нет.
((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})
использовать следующее регулярное выражение, чтобы удовлетворить следующим условиям:
Conditions: 1] Min 1 special character.
2] Min 1 number.
3] Min 8 characters or More
регулярное выражение:
^(?=.*\д)(?=.*[#$@!%&усилителей;*?])[А-Яа-я\Г#$@!%&пож;*?]{8,}$
можно протестировать онлайн: https://regex101.com
Попробуйте это:
^.*(?=.{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);
}
Демо:
в
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">
в