2014-03-28 33 views
0

我寫了這個。但它正在使用邪惡的評估。任何指導乾淨的方式來完成這件事。我的衛生方法足夠好嗎?我搜索堆棧,發現其他答案,但沒有跳出我的正確的方式計算單個文本元素的值

<input class="simple-math" name="TheCalculation" value=""> 

最終用戶將在5 + 3或東西進入,框將更新該值以8

$().ready(function() { 
     $(".simple-math").change(function() { 
      // get the current val 
      var raw = $(this).val(); 
      // sanitize, so a smarty-pants can't do bad stuff 
      var sanitize = raw.replace(/[^0-9\+\-\*\/\%\(\)]+/, ""); 
      // eval the input 
      var calc = eval(sanitize); 
      // set the value 
      $(this).val(calc); 
     }) 
    }); 
+3

如果您要從服務器輸出用戶輸入的數據,通常'eval'是邪惡的。如果你只是評估用戶輸入的內容,他們會對自己做些什麼「壞事」? – Tesserex

+0

@Tesserex非常好地解釋。 –

+0

我在這裏看不到任何依賴於jQuery的問題。 – RobG

回答

0

清潔

在什麼意義?有一些替代方案:

  1. 解析輸入,做自己的計算,但EVAL非常不適合您。

  2. 提供類似計算器的用戶界面,以便用戶只能訪問您提供的用於構建表達式的令牌。驗證構建的表達式,然後將結果傳遞給eval(或者自己解析它)。

了sanitize方法不夠好

它將影響像2.5 * 3,因爲它會剝離期間,和2.3e3 * 6表達式在那裏將去掉的週期和e的結果,所以也許不。