Я провел небольшое исследование, чтобы найти хороший пример проверки надежности пароля. JavaScript и Обычные выражения (регулярное выражение). В приложении на моей работе мы отправляем обратно сообщение для проверки надежности пароля, что довольно неудобно для наших пользователей.
Содержание
Что такое регулярное выражение?
Регулярное выражение — это последовательность символов, определяющая шаблон поиска. Обычно алгоритмы поиска строк используют такие шаблоны найти или найти и заменить для строковых операций или проверки ввода.
Эта статья определенно не предназначена для обучения вас регулярным выражениям. Просто знайте, что возможность использовать регулярные выражения полностью упростит вашу разработку при поиске шаблонов в тексте. Также важно отметить, что большинство языков разработки оптимизированы для использования регулярных выражений… поэтому вместо последовательного синтаксического анализа и поиска строк Regex обычно намного быстрее как на стороне сервера, так и на стороне клиента.
Я довольно долго искал в Интернете, прежде чем нашел его пример некоторые отличные регулярные выражения, которые ищут комбинацию длины, символов и символов. Однако, на мой вкус, код был немного чрезмерным и заточенным под .NET. Поэтому я упростил код и поместил его в JavaScript. Это позволяет браузеру клиента проверять надежность пароля в режиме реального времени перед его публикацией… и дает пользователю некоторое представление о надежности пароля.
Введите пароль пользователя А
С каждой клавишей на клавиатуре пароль сверяется с регулярным выражением, а затем пользователю предоставляется обратная связь ниже.
Функция надежности пароля JavaScript
Обычные выражения сделать фантастическую работу по сокращению длины кода. Эта функция Javascript проверяет надежность пароля и определяет, является ли он простым, средним, сложным или чрезвычайно трудным для угадывания. Когда человек пишет, он показывает подсказки, чтобы побудить его стать сильнее. Он проверяет пароль на основе:
- Длина – Если длина меньше или больше 8 символов.
- Смешанный случай – Если пароль содержит как прописные, так и строчные буквы.
- Числа – Если пароль содержит цифры.
- Специальные символы – Если пароль содержит специальные символы.
Эта функция показывает сложность, а также дает несколько советов по дальнейшему усилению пароля.
function checkPasswordStrength(password) {
// Initialize variables
var strength = 0;
var tips = "";
// Check password length
if (password.length < 8) {
tips += "Make the password longer. ";
} else {
strength += 1;
}
// Check for mixed case
if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {
strength += 1;
} else {
tips += "Use both lowercase and uppercase letters. ";
}
// Check for numbers
if (password.match(/\d/)) {
strength += 1;
} else {
tips += "Include at least one number. ";
}
// Check for special characters
if (password.match(/[^a-zA-Z\d]/)) {
strength += 1;
} else {
tips += "Include at least one special character. ";
}
// Return results
if (strength < 2) {
return "Easy to guess. " + tips;
} else if (strength === 2) {
return "Medium difficulty. " + tips;
} else if (strength === 3) {
return "Difficult. " + tips;
} else {
return "Extremely difficult. " + tips;
}
}
Если вы хотите обновить цвет пера, вы также можете сделать это, обновив код после // Return results
линия.
// Get the paragraph element
var strengthElement = document.getElementById("passwordStrength");
// Return results
if (strength < 2) {
strengthElement.textContent = "Easy to guess. " + tips;
strengthElement.style.color = "red";
} else if (strength === 2) {
strengthElement.textContent = "Medium difficulty. " + tips;
strengthElement.style.color = "orange";
} else if (strength === 3) {
strengthElement.textContent = "Difficult. " + tips;
strengthElement.style.color = "black";
} else {
strengthElement.textContent = "Extremely difficult. " + tips;
strengthElement.style.color = "green";
}
Функция надежности пароля jQuery
С jQuery нам фактически не нужно писать форму с обновлением ввода:
<form>
<label for="password">Enter password:</label>
<input type="password" id="password">
<p id="password-strength"></p>
</form>
Мы также можем изменить цвет сообщений, если захотим.
$(document).ready(function() {
$('#password').on('input', function() {
var password = $(this).val();
var strength = 0;
var tips = "";
// Check password length
if (password.length < 8) {
tips += "Make the password longer. ";
} else {
strength += 1;
}
// Check for mixed case
if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {
strength += 1;
} else {
tips += "Use both lowercase and uppercase letters. ";
}
// Check for numbers
if (password.match(/\d/)) {
strength += 1;
} else {
tips += "Include at least one number. ";
}
// Check for special characters
if (password.match(/[^a-zA-Z\d]/)) {
strength += 1;
} else {
tips += "Include at least one special character. ";
}
// Update the text and color based on the password strength
var passwordStrengthElement = $('#password-strength');
if (strength < 2) {
passwordStrengthElement.text("Easy to guess. " + tips);
passwordStrengthElement.css('color', 'red');
} else if (strength === 2) {
passwordStrengthElement.text("Medium difficulty. " + tips);
passwordStrengthElement.css('color', 'orange');
} else if (strength === 3) {
passwordStrengthElement.text("Difficult. " + tips);
passwordStrengthElement.css('color', 'black');
} else {
passwordStrengthElement.text("Extremely difficult. " + tips);
passwordStrengthElement.css('color', 'green');
}
});
});
Подтвердить запрос пароля
Важно, чтобы вы не просто проверяли конструкцию пароля в своем Javascript. Это позволит любому, у кого есть средства разработки браузера, обойти сценарий и использовать любой пароль, который он захочет. Вы должны ВСЕГДА использовать проверку на стороне сервера, чтобы подтвердить надежность пароля, прежде чем сохранять его на своей платформе.
Функция PHP для усиления пароля
function checkPasswordStrength($password) {
// Initialize variables
$strength = 0;
// Check password length
if (strlen($password) < 8) {
return "Easy to guess";
} else {
$strength += 1;
}
// Check for mixed case
if (preg_match("/[a-z]/", $password) && preg_match("/[A-Z]/", $password)) {
$strength += 1;
}
// Check for numbers
if (preg_match("/\d/", $password)) {
$strength += 1;
}
// Check for special characters
if (preg_match("/[^a-zA-Z\d]/", $password)) {
$strength += 1;
}
// Return strength level
if ($strength < 2) {
return "Easy to guess";
} else if ($strength === 2) {
return "Medium difficulty";
} else if ($strength === 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
Функция Python для надежности пароля
def check_password_strength(password):
# Initialize variables
strength = 0
# Check password length
if len(password) < 8:
return "Easy to guess"
else:
strength += 1
# Check for mixed case
if any(char.islower() for char in password) and any(char.isupper() for char in password):
strength += 1
# Check for numbers
if any(char.isdigit() for char in password):
strength += 1
# Check for special characters
if any(not char.isalnum() for char in password):
strength += 1
# Return strength level
if strength < 2:
return "Easy to guess"
elif strength == 2:
return "Medium difficulty"
elif strength == 3:
return "Difficult"
else:
return "Extremely difficult"
Функция С# для надежности пароля
public string CheckPasswordStrength(string password) {
// Initialize variables
int strength = 0;
// Check password length
if (password.Length < 8) {
return "Easy to guess";
} else {
strength += 1;
}
// Check for mixed case
if (password.Any(char.IsLower) && password.Any(char.IsUpper)) {
strength += 1;
}
// Check for numbers
if (password.Any(char.IsDigit)) {
strength += 1;
}
// Check for special characters
if (password.Any(ch => !char.IsLetterOrDigit(ch))) {
strength += 1;
}
// Return strength level
if (strength < 2) {
return "Easy to guess";
} else if (strength == 2) {
return "Medium difficulty";
} else if (strength == 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
Функция Java для усиления пароля
public String checkPasswordStrength(String password) {
// Initialize variables
int strength = 0;
// Check password length
if (password.length() < 8) {
return "Easy to guess";
} else {
strength += 1;
}
// Check for mixed case
if (password.matches(".*[a-z].*") && password.matches(".*[A-Z].*")) {
strength += 1;
}
// Check for numbers
if (password.matches(".*\\d.*")) {
strength += 1;
}
// Check for special characters
if (password.matches(".*[^a-zA-Z\\d].*")) {
strength += 1;
}
// Return strength level
if (strength < 2) {
return "Easy to guess";
} else if (strength == 2) {
return "Medium difficulty";
} else if (strength == 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}