验证基于用户输入的数学公式

问题描述:

我知道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

您可以尝试这样的事:

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