2012-07-06 93 views
3

我知道SO不是一個代碼生成器,但我打破了我的頭腦,而且我會因此RegExp而生氣。

我有<input />鍵入文字,在HTML <form />中。當用戶雙擊特定列表中的元素時,輸入會自動填充。
此事件將生成類似"[text:number]""[text:number:text]"的字符串,並將其放在我的<input />字段中的光標位置。
該過程的第一個目標是構建一個數學公式結構。我的意思是,方括號之間生成的字符串將插入元素,然後我想讓用戶只能將號碼和運算符放入

驗證基於用戶輸入的數學公式

我已經盡力了​​綁定事件,並與String.fromCharCode(e.which);測試焦炭但對鍵「+」或「 - 」(和其他經營者)這個函數返回alphabeticals字符。沒有成功。
然後,我終於決定使用keyup事件,然後使用RegExp替換<input />值。

 $("#inputID").keyup(function(){ 
      var formule = $(this).val(); 
      var valid_formule = formule.replace(CRAZY_REGEXP,''); 
      $(this).val(valid_formule); 
     }); 


所以,我的問題如下:
如何構建一個javascript正則表達式,以去除沒有括號,並且所有字符都是()+-*/,.numbers型動物。
一個例子:
"a[dse:1]a+a[dse:5]a+a[cat:5:sum]a+(a10a/5,5)!"
將成爲
"[dse:1]+[dse:5]-[cat:5:sum]+(10/5,5)"

我打開另一種方式來實現我的目標,如果你有一些想法。 謝謝!

+2

如果你想檢查圓括號的平衡,正則表達式不會完成這項工作。你需要一個更復雜的解析器。 – 2012-07-06 09:34:56

回答

4

您可以嘗試這樣的事:

var re = /[^\]\d\(\)+\-*\/,.]+(?=[^\[\]\(\)]*(?:\[|\(|$))/g; 
$("#inputID").keyup(function(){ 
    this.value = this.value.replace(re, ""); 
}); 

請記住,雖然,你必須確保括號結構是一致的與你的語法。

建議:使用RegExr來測試你的正則表達式,但請記住,這是不是JavaScript正則表達式的支持更強大

+0

我不能upvote你的帖子,但你救了我的一天!就像你所說的,下一步是驗證公式的全局結構。謝謝 ! (和鏈接+1) – user1488957 2012-07-06 09:21:03

+0

不客氣。我只是在第一個'[']'組中做了一個小修改(把'\)'兩次),但它仍然可以工作。 – MaxArt 2012-07-06 09:31:07