Javascript 基于用户输入的数学公式验证
我知道SO不是一个代码生成器,但我会伤脑筋,对这个RegExp很生气Javascript 基于用户输入的数学公式验证,javascript,jquery,regex,math,Javascript,Jquery,Regex,Math,我知道SO不是一个代码生成器,但我会伤脑筋,对这个RegExp很生气 我已经在HTML中键入了文本。当用户双击特定列表中的元素时,将自动填充输入 此事件将生成类似于“[文本:编号]”或“[文本:编号:文本]”的字符串,并将其放置在我的字段中的光标位置。 这个过程的第一个目标是构造一个数学公式结构。我的意思是,在括号之间生成的字符串将插入元素,然后我希望允许用户只放置数字和运算符。 我已经尝试绑定keydown事件,并使用String.fromCharCode(e.which)测试char但对于键
我已经在HTML
中键入了文本。当用户双击特定列表中的元素时,将自动填充输入此事件将生成类似于
“[文本:编号]”
或“[文本:编号:文本]”
的字符串,并将其放置在我的
字段中的光标位置。这个过程的第一个目标是构造一个数学公式结构。我的意思是,在括号之间生成的字符串将插入元素,然后我希望允许用户只放置数字和运算符。
我已经尝试绑定
keydown
事件,并使用String.fromCharCode(e.which)测试char
但对于键“+”或“-”(以及其他运算符),此函数返回字母顺序字符。没有成功。然后,我最终决定使用
keyup
事件,然后使用RegExp替换
值
$("#inputID").keyup(function(){
var formule = $(this).val();
var valid_formule = formule.replace(CRAZY_REGEXP,'');
$(this).val(valid_formule);
});
因此,我的问题如下:
如何构造一个javascript RegExp,以删除所有不是括号中的,并且是
()+-*/,.
和数字不同的字符
例如:
“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, "");
});
但是,请记住,您必须确保插入式结构与语法一致
建议:用于测试正则表达式,但请记住,它比Javascript正则表达式支持更强大。我无法更新您的帖子,但您帮了我一把!正如你所说,下一步是验证公式的全局结构。谢谢(和+1的链接)不客气。我只是在第一个[…]
组中做了两次小的编辑(将\)
放在第一个[…]
组中),但无论如何都可以。如果要检查圆括号的平衡性,正则表达式将无法完成这项工作。您需要一个更复杂的解析器。