<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

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

Подпишитесь на мой канал на 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(), но все равно требует осторожности.
  • Регулярные выражения: Валидация ввода перед оценкой.

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

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