我想用JavaScript編寫簡單的計算器。我想檢查用戶輸入是否正確。我寫了正則表達式,以確保用戶輸入是正確的,但它不工作。我想要做的是一個簡單的規則,即操作符(/ * - +)後面應該跟操作數(0-9),但第一個操作符可以是 - 或+。下面的正則表達式不起作用。我的錯誤是什麼?如何使用JavaScript的計算器輸入正則表達式?
^[-+]?[0-9]{0,}([-+*/]?)[0-9]+$
我想用JavaScript編寫簡單的計算器。我想檢查用戶輸入是否正確。我寫了正則表達式,以確保用戶輸入是正確的,但它不工作。我想要做的是一個簡單的規則,即操作符(/ * - +)後面應該跟操作數(0-9),但第一個操作符可以是 - 或+。下面的正則表達式不起作用。我的錯誤是什麼?如何使用JavaScript的計算器輸入正則表達式?
^[-+]?[0-9]{0,}([-+*/]?)[0-9]+$
你的表達式看起來用於可選-
或+
隨後零或多個數字([0-9]{0,}
)。我想你可能想要一個或多個(+
)。同樣地,?
在([-+*/]?)
中使運營商可選。您可能還想要捕捉各個部分。
當兩個操作數之間有一個操作符時,這很好,但是當我做9 + 9 + 9時,它不止兩個操作。
如果你想允許其他的操作符和數字跟在它們後面,你必須允許後面的部分重複。
這裏是我的粗略看法:
^\s*([-+]?)(\d+)(?:\s*([-+*\/])\s*((?:\s[-+])?\d+)\s*)+$
Live Example(但有一些不太正確與捕獲組發生的,如果你有三個或更多的條款。)
改變我做:
使用\d
而不是[0-9]
(\d
代表「數字」)
將數字和運算符放入捕獲組中。
不要使數字或操作符可選。
在各個地方允許可選的空格(\s*
)。
(?: _________)+
是什麼讓這些parens內的部分重複。
允許在第二組數字前面有一個-
或+
,但前提是在操作員之後有空格。
^[-+]?
是正確的,但後來
[0-9]{0,}
是不是,你想+量詞,如果你使用{0,}(這是一樣的*),你可以有「+ * 9「是正確的。 然後,
([-+*/]?)[0-9]+
是錯誤的,你想:
([-+*/]+[-+]?[0-9]+)*
所以,你將有例如* -523 + 4234/-34(你可以在一個負或正數,使用操作或者沒有一種高精度這意味着顯着正)
所以最後數目,你會是這樣的:
^[-+]?[0-9]+([-+*/]+[-+]?[0-9]+)*$
當然,您可以用\ d
替換類[0-9]不要將正則表達式混合到計算器中。不要。 – Jon
@Jon:鑑於OP列出的限制,沒關係。 –
@ hm:「不工作」不是一個有用的問題描述。什麼投入沒有達到你期望的水平? –