05.09.2018, 15:42
|
Интересующийся
|
|
Регистрация: 05.09.2018
Сообщений: 28
|
|
Скрипт для проверки логина и пароля
Добрый день, уважаемые коллеги!
Прошу Вас помочь начинающему. Изучаю самостоятельно JS. Попалась такая задача, простая для знающего человека, над которой я давно уже бьюсь.
Есть массив logins с логинами пользователей. Нужно написать скрипт добавления логина в массив logins.
Добавляемый логин должен:
- проходить проверку на длину от 4 до 16-ти символов включительно
- быть уникален, то есть отсутствовать в массиве logins
Вот мой скрипт. Но идут ошибки. Что-то где-то не то:
"use strict";
const logins = ["Mango", "robotGoogles", "Poly", "Aj4x1sBozz", "qwerty123"]; //массив по-условию
let login = prompt("Введите новый логин", ""); //запрос на ввод нового логина
//проверка на количество символов
const isLoginValid = function (login) {
if (login.length < 4 || login.length > 16) {
alert('Ошибка! Логин должен быть от 4 до 16 символов');
return false;
}
return true;
};
//проверка на совпадения
const isLoginUnique = function (login, allLogins) {
if (allLogins.includes(login)) {
alert('Такой логин уже используется!');
return false;
}
return true;
};
// добавление логина в массив
const addLogin = function (login) {
if (isLoginValid(true) && isLoginUnique(true)) {
alert('Логин успешно добавлен!');
logins.push(login);
}
};
//вызов функций
isLoginValid(login);
isLoginUnique(login, logins);
addLogin(login);
Алерты ниже, я хочу использовать в последней функции addLogin, которая получит на вход результаты первых двух.
//(isLoginValid(true) || isLoginUnique(true)) // alert('Логин успешно добавлен!');
//(isLoginValid(true) || isLoginUnique(false)) // alert('Такой логин уже используется!');
//(isLoginValid(false) || isLoginUnique(true)) // alert('Ошибка! Логин должен быть от 4 до 16 символов');
|
|
05.09.2018, 16:05
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
<script>
"use strict";
const logins = ["Mango", "robotGoogles", "Poly", "Aj4x1sBozz", "qwerty123"]; //массив по-условию
let login = prompt("Введите новый логин", ""); //запрос на ввод нового логина
//проверка на количество символов
const isLoginValid = function (login) {
if (login.length < 4 || login.length > 16) {
alert('Ошибка! Логин должен быть от 4 до 16 символов');
return false;
}
return true;
};
//проверка на совпадения
const isLoginUnique = function (login, allLogins) {
if (allLogins.includes(login)) {
alert('Такой логин уже используется!');
return false;
}
return true;
};
// добавление логина в массив
const addLogin = function (login) {
if (isLoginValid(login) && isLoginUnique(login, logins)) {
alert('Логин успешно добавлен!');
logins.push(login);
}
};
//вызов функций
addLogin(login);
</script>
Последний раз редактировалось Dilettante_Pro, 05.09.2018 в 16:07.
|
|
05.09.2018, 16:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
AndriiS, а наряду с логинами еще и массив паролей в задаче?
|
|
05.09.2018, 16:31
|
Интересующийся
|
|
Регистрация: 05.09.2018
Сообщений: 28
|
|
Сообщение от laimas
|
AndriiS, а наряду с логинами еще и массив паролей в задаче?
|
Да, это в условии исходный массив. Для того, чтобы проверять функцию которая сравнивает на совпадения. Потом в него добавлять новые.
|
|
05.09.2018, 16:42
|
Интересующийся
|
|
Регистрация: 05.09.2018
Сообщений: 28
|
|
Dilettante_Pro,
Вам большое спасибо! Теперь искать свои ошибки будет веселей. :-)
|
|
05.09.2018, 16:45
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от AndriiS
|
Да, это в условии исходный массив.
|
Пароли никогда и не под каким предлогом не проверяются на клиенте, ибо это не просто дыра в безопасности будет, а целый портал. Да и логины, коих на сайте может быть множество, вываливать на клиента нет никакого смысла. Такие проверки делаются на сервере, клиент только запрашивает его используя для облегчения жизни пользователю асинхронный запрос.
Смысла в задачах, которые не имеют практического применения никакого нет.
|
|
06.09.2018, 00:41
|
Интересующийся
|
|
Регистрация: 05.09.2018
Сообщений: 28
|
|
Всем доброй ночи!
Я дал неверное название темы. Нужно просто Скрипт для проверки логина. Без пароля. Погорячился и теперь как честный человек должен сюда привести скрипт по проверке пароля. :-)
По теме, я хотел уточнить вот что: изначально я хотел реализовать другой алгоритм проверки логина. Менее оптимальный, чем привел Dilettante_Pro, но теперь для тренировки хочу сам его сделать. Идея была в том, что первая и вторая функции проверяющие длину и наличие того, что ввел юзер возвращают в результате true или false. Потом, есть третья функция, которая принимает в себя одну из комбинаций (true/true, false/true, false/false, true/false) от двух первых и в зависимости от того, что подходит, потом она выдает return и соответствующий alert. Это я попробую через if else.
Главный мой вопрос, - как передать на вход третьей функции булевы значения? Как взять були из первых двух и отдать их третьей функции для обработки? Передать ей их в виде аргументов как-то? Я запутался.
Заранее благодарен за помощь.
|
|
06.09.2018, 05:20
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
AndriiS, единственная возможная и нужная проверка логина на клиенте, это его длина мин/макс, разрешенные символы, если есть. Это все, ни какой проверки уникальности не должно быть, хотя бы уже потому, что пока пользователь А чесал репу и выбрал не занятый "abc", пользователь В в это время занял его.
Занятость логина проверяется запросом на сервер по запросу пользователя или же автоматически при смене фокуса заполненного поля. Она также проверяется при отправлении формы, и даже после этого прежде чем добавить в базу, сервер проверяет занятость, не допуская записи не уникальных значений.
Решайте задачи, которые действительно вам предстоит решать на практике.
|
|
06.09.2018, 10:56
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от AndriiS
|
Идея была в том, что первая и вторая функции проверяющие длину и наличие того, что ввел юзер возвращают в результате true или false. Потом, есть третья функция, которая принимает в себя одну из комбинаций (true/true, false/true, false/false, true/false) от двух первых и в зависимости от того, что подходит, потом она выдает return и соответствующий alert.
|
Именно так и работает пример в пост 2.
Запуск функций isLoginValid(login) и isLoginUnique(login, logins) в функции addLogin возвращает в нее результаты выполнения этих функций
Если очень хочется запускать их не в функции addLogin, а передавать в нее их результаты, то можно так:
<script>
"use strict";
const logins = ["Mango", "robotGoogles", "Poly", "Aj4x1sBozz", "qwerty123"]; //массив по-условию
let login = prompt("Введите новый логин", ""); //запрос на ввод нового логина
//проверка на количество символов
const isLoginValid = function (login) {
if (login.length < 4 || login.length > 16) {
alert('Ошибка! Логин должен быть от 4 до 16 символов');
return false;
}
return true;
};
//проверка на совпадения
const isLoginUnique = function (login, allLogins) {
if (allLogins.includes(login)) {
alert('Такой логин уже используется!');
return false;
}
return true;
};
// добавление логина в массив
const addLogin = function (login, parValid, parUniq) {
if (parValid && parUniq) {
alert('Логин успешно добавлен!');
logins.push(login);
}
};
//вызов функций
addLogin(login, isLoginValid(login), isLoginUnique(login, logins));
</script>
Последний раз редактировалось Dilettante_Pro, 06.09.2018 в 11:08.
|
|
|
|