2016-04-26 4 views
1

Вопрос такой же простой, как и заголовок: Как убедиться, что строка содержит расчет.Проверьте, содержит ли строка вычисления

У меня есть строка, которая должна содержать расчет. Строка может быть примерно такой: "10 * 10/2 * 3". Но всегда есть люди, которые хотят сломать вещи, поэтому я хочу проверить, является ли это расчет. Пользователь может заполнить что-то вроде этого: "alert('hi!')".

Когда я использую eval(), он все равно предупредит пользователя (если пользователь заполнил: "alert()").

Кто-нибудь знает, как я могу проверить, содержит ли строка расчет и ничего больше?

+0

возможно с регулярным выражением и белым списком для знаков/цифр. –

+0

Не могли бы вы привести пример регулярного выражения для моего дела @NinaScholz? –

+0

Пожалуйста, не используйте 'eval' с введенным пользователем кодом. Это может привести к проблемам :-( – Tuvia

ответ

3

Если вы просто хотите проверить, если строка содержит арифметическую операцию, вы Коула сравнить его с регулярным выражением, как это:

([-+]?[0-9]*\.?[0-9]+[\/\+\-\*])+([-+]?[0-9]*\.?[0-9]+) 

НО, я настоятельно рекомендую использовать библиотеку JavaScript, как mathjs, или JavaScript Expression Evaluator library, с помощью которого можно сделать, например:

Parser.evaluate("3^x", { x: 7 }); 

Эти библиотеки будут заботиться игнорировать инъекции кода, конечно ... :-)

+0

Mathjs отлично работает: D Спасибо! –

1

В этом случае я бы рекомендовал другое решение.

Вместо того, чтобы пытаться указать white list свою строку, чтобы убедиться, что это просто математические выражения, я бы рекомендовал вам использовать библиотеку специально для обработки математики в первую очередь.

У меня нет опыта работы с ним, но быстро Google из «JavaScript математики анализаторов» привел меня к этому: http://mathjs.org/docs/expressions/parsing.html

0

Вы можете просто проверить входные жала для персонажей. Если укуса содержит любые символы, такие как (a, b, c ... z), вы не оцениваете его.

Смежные вопросы