我有一個算術表達式 ((20 + 30)-25)/ 5 我想通過使用正則表達式進行驗證。該表達式只能包含整數,浮點數,操作數和括號。javascript驗證算術表達式的正則表達式
我怎樣才能產生正則表達式驗證請幫助或建議的任何其它方式使用JavaScript來驗證字符串。
我有一個算術表達式 ((20 + 30)-25)/ 5 我想通過使用正則表達式進行驗證。該表達式只能包含整數,浮點數,操作數和括號。javascript驗證算術表達式的正則表達式
我怎樣才能產生正則表達式驗證請幫助或建議的任何其它方式使用JavaScript來驗證字符串。
正如我在評論中所說的,使用一個JavaScript正則表達式是不可能的。但是,您可以使用循環來做到這一點:用原子替換子表達式,重複直到得到原子。如果你不能再減少,而且剩下的不是原子,那麼它就不會被驗證。這實際上與您要評估它的過程幾乎相同(只是跳過抽象語法樹)。您可以搜索\(\d+\)|\d+[-+/*]\d+
與0
取代:
例子:
((20+30)-25)/5
((0)-25)/5
(0-25)/5
(0)/5
0/5
0
如果未能匹配,並沒有只是0
,這是一個失敗。
(評價相驗證,你只需要與實際值,而不是一個虛擬的替身,一切被替換是一樣的)。
如果您在括號嵌套中施加最大深度,則只能使用正則表達式執行此操作。否則,該組算術表達式形成上下文無關語言,但不是常規語言。
如果我不得不使用正則表達式,我會使用的方法是寫你的一套算術表達式的語法規則,然後將其轉換成一個正則表達式。
另一種方法是編寫一個遞歸下降解析器,這是一個相當簡單的項目,非常漂亮適用於算術表達式。
JavaScript「eval」函數是最好的驗證器。 試着這樣做:
eval("((20+30)-25)5");
,你會得到足夠詳細的錯誤描述。
參見:http://stackoverflow.com/questions/5085524/regular-expression-for-simple-arithmetic-string正則表達式是在大部分語言的相同。 –
你有什麼嘗試?以下鏈接可以幫助您:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp –
@Derek:誤導,即使您說的是「最」。這不可能通過preg引擎或標準正則表達式(因爲它們不能平衡括號),但可以使用Oniguruma(可用於Ruby和其他一些,但不支持JavaScript) – Amadan