验证基于用户输入的数学公式
我知道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)"
我打开另一种方式来实现我的目标,如果你有一些想法。 谢谢!
您可以尝试这样的事:
var re = /[^\]\d\(\)+\-*\/,.]+(?=[^\[\]\(\)]*(?:\[|\(|$))/g;
$("#inputID").keyup(function(){
this.value = this.value.replace(re, "");
});
请记住,虽然,你必须确保括号结构是一致的与你的语法。
建议:使用RegExr来测试你的正则表达式,但请记住,这是不是JavaScript正则表达式的支持更强大。
我不能upvote你的帖子,但你救了我的一天!就像你所说的,下一步是验证公式的全局结构。谢谢 ! (和链接+1) – user1488957 2012-07-06 09:21:03
不客气。我只是在第一个'[']'组中做了一个小修改(把'\)'两次),但它仍然可以工作。 – MaxArt 2012-07-06 09:31:07
如果你想检查圆括号的平衡,正则表达式不会完成这项工作。你需要一个更复杂的解析器。 – 2012-07-06 09:34:56