2014-06-15 41 views
1

我想用JavaScript編寫簡單的計算器。我想檢查用戶輸入是否正確。我寫了正則表達式,以確保用戶輸入是正確的,但它不工作。我想要做的是一個簡單的規則,即操作符(/ * - +)後面應該跟操作數(0-9),但第一個操作符可以是 - 或+。下面的正則表達式不起作用。我的錯誤是什麼?如何使用JavaScript的計算器輸入正則表達式?

^[-+]?[0-9]{0,}([-+*/]?)[0-9]+$ 
+0

替換類[0​​-9]不要將正則表達式混合到計算器中。不要。 – Jon

+1

@Jon:鑑於OP列出的限制,沒關係。 –

+2

@ hm:「不工作」不是一個有用的問題描述。什麼投入沒有達到你期望的水平? –

回答

2

你的表達式看起來用於可選-+隨後或多個數字([0-9]{0,})。我想你可能想要一個或多個(+)。同樣地,?([-+*/]?)中使運營商可選。您可能還想要捕捉各個部分。

當兩個操作數之間有一個操作符時,這很好,但是當我做9 + 9 + 9時,它不止兩個操作。

如果你想允許其他的操作符和數字跟在它們後面,你必須允許後面的部分重複。

這裏是我的粗略看法:

^\s*([-+]?)(\d+)(?:\s*([-+*\/])\s*((?:\s[-+])?\d+)\s*)+$ 

Live Example(但有一些不太正確與捕獲組發生的,如果你有三個或更多的條款。)

改變我做:

  1. 使用\d而不是[0-9]\d代表「數字」)

  2. 將數字和運算符放入捕獲組中。

  3. 不要使數字或操作符可選。

  4. 在各個地方允許可選的空格(\s*)。

  5. (?: _________)+是什麼讓這些parens內的部分重複。

  6. 允許在第二組數字前面有一個-+,但前提是在操作員之後有空格。

+0

會很奇怪,如果沒有第二個'([ - +]?)'需要在第二個'\ d' – Victory

+0

這裏稍微更新regex101 http://regex101.com/r/cW5gS1 – Victory

+0

@勝利:是的,我同意。 「(?:____)」中的捕獲組也存在一些我還沒有想到的問題。 –

0
^[-+]? 

是正確的,但後來

[0-9]{0,} 

是不是,你想+量詞,如果你使用{0,}(這是一樣的*),你可以有「+ * 9「是正確的。 然後,

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

是錯誤的,你想:

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

所以,你將有例如* -523 + 4234/-34(你可以在一個負或正數,使用操作或者沒有一種高精度這意味着顯着正)

所以最後數目,你會是這樣的:

^[-+]?[0-9]+([-+*/]+[-+]?[0-9]+)*$ 

當然,您可以用\ d

相關問題