<MyRusakov.ru />

Профессиональная Web-разработка. Дизайн, код и автоматизация

Профессиональная Web-разработка. Дизайн, код и автоматизация

Это очень подробный курс из разряда "всё включено". Разбираются следующие темы: HTML, CSS, SCSS, JavaScript, PHP, SQL, Laravel, Nginx, PostCSS, npm, Vite, Vitest, Composer, PHPUnit, Prettier, Stylelint, ESLint, Pint, Larastan, Git, Agile, Scrum, Docker, Supervisord, Figma, Stitch AI, Confluence, Jira.

Рассчитан и на новичков, и на тех, кто уже знаком с основами, но хочет освоить полный цикл разработки.

Помимо самой теории, Вы увидите пример создания Web-проекта на 20 000 строк кода: от идеи и документации на Confluence через планирование на Jira, fullstack-разработку до деплоя на VPS.

Помимо уроков, курс содержит упражнения для закрепления знаний и финальное тестирование. А ещё Вы получите 5 полноценных Бонусных курсов: «GitLab под ключ», «Вёрстка сайта с нуля 2.0», «JavaScript с Нуля до Гуру 2.0», «PHP и MySQL с Нуля до Гуру 3.0» и «Laravel от А до Я».

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Выполнение математических операций: альтернативы eval в JavaScript

Выполнение математических операций: альтернативы eval в JavaScript

Доброго времени суток! Представим, что у нас есть некоторое математическое выражение, полученной от пользователя и которое необходимо выполнить. Например вычислить результат математической операции в JavaScript калькуляторе. Первое, что приходит на ум - это использование выражения eval в JavaScript

Использование eval() для оценки выражений в калькуляторе может быть рискованным, так как выражение может выполнить произвольный код и создать уязвимости, особенно если используется ввод от пользователя. Более безопасный подход — вручную разбирать и оценивать математические выражения.

Вот несколько безопасных альтернатив eval() для создания калькулятора:

1. Использование математической библиотеки JavaScript

Вы можете использовать библиотеки, такие как math.js, которые безопасно выполняют математические выражения без риска выполнения произвольного кода.

Пример с использованием Math.js:

Сначала установите библиотеку:

npm install mathjs

Затем, в вашем JavaScript-коде:

// Импортируйте библиотеку math.js
const math = require('mathjs');

function calculate(expression) {
    try {
        return math.evaluate(expression); // Безопасная оценка математического выражения
    } catch (error) {
        return "Недопустимое выражение!";
    }
}

console.log(calculate("2 + 3 * (7 - 4)")); // Выводит 11

2. Ручной разбор

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

Пример простого калькулятора без eval():

function calculate(expression) {
    try {
        // Разделите выражение на числа и операторы
        let operators = expression.replace(/[0-9]|\./g, "").split("");
        let numbers = expression.split(/[^0-9\.]+/).map(Number);

        let result = numbers[0];

        for (let i = 0; i < operators.length; i++) {
            switch (operators[i]) {
                case '+':
                    result += numbers[i + 1];
                    break;
                case '-':
                    result -= numbers[i + 1];
                    break;
                case '*':
                    result *= numbers[i + 1];
                    break;
                case '/':
                    result /= numbers[i + 1];
                    break;
                default:
                    return "Недопустимая операция!";
            }
        }
        return result;
    } catch (error) {
        return "Недопустимое выражение!";
    }
}

console.log(calculate("2+3*4")); // Выводит 14

3. Использование конструктора Function

Несколько менее безопасной альтернативой eval() является использование конструктора Function. Этот метод требует осторожности, но считается безопаснее, чем прямое использование eval().

function calculate(expression) {
    try {
        const func = new Function("return " + expression);
        return func();
    } catch (error) {
        return "Недопустимое выражение!";
    }
}

console.log(calculate("2 + 3 * (7 - 4)")); // Выводит 11

4. Регулярные выражения для валидации

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

Пример с проверкой через регулярное выражение:

function calculate(expression) {
    const validExpression = /^[0-9+\-*/().\s]+$/;

    if (!validExpression.test(expression)) {
        return "Недопустимое выражение!";
    }

    try {
        return new Function("return " + expression)();
    } catch (error) {
        return "Недопустимое выражение!";
    }
}

console.log(calculate("2 + 3 * (7 - 4)")); // Выводит 11
console.log(calculate("2 + alert('Hacked!')")); // Возвращает "Недопустимое выражение!"

Резюме вариантов:

  • math.js: Самый безопасный и полный по функциям метод.
  • Ручной разбор: Подходит для простых калькуляторов (сложение, вычитание и т.д.).
  • Конструктор Function: Безопаснее, чем eval(), но все равно требует осторожности.
  • Регулярные выражения: Валидация ввода перед оценкой.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

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

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.