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

Javascript 基于用户输入的数学公式验证,javascript,jquery,regex,math,Javascript,Jquery,Regex,Math,我知道SO不是一个代码生成器,但我会伤脑筋,对这个RegExp很生气 我已经在HTML中键入了文本。当用户双击特定列表中的元素时,将自动填充输入 此事件将生成类似于“[文本:编号]”或“[文本:编号:文本]”的字符串,并将其放置在我的字段中的光标位置。 这个过程的第一个目标是构造一个数学公式结构。我的意思是,在括号之间生成的字符串将插入元素,然后我希望允许用户只放置数字和运算符。 我已经尝试绑定keydown事件,并使用String.fromCharCode(e.which)测试char但对于键

我知道SO不是一个代码生成器,但我会伤脑筋,对这个RegExp很生气

我已经在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的链接)不客气。我只是在第一个
[…]
组中做了两次小的编辑(将
\)
放在第一个
[…]
组中),但无论如何都可以。如果要检查圆括号的平衡性,正则表达式将无法完成这项工作。您需要一个更复杂的解析器。