javascript - 根据用户输入验证数学公式

标签 javascript jquery regex math

我知道 SO 不是一个代码生成器,但我打破了我的脑袋,我会对这个 RegExp 感到生气。

我有 <input />在 HTML 中输入文本 <form /> .当用户双击特定列表中的元素时,输入会自动填充。
此事件将生成类似 "[text:number]" 的字符串或 "[text:number:text]" , 并将其放在我的 <input /> 中的光标位置领域。
这个过程的第一个目标是构建一个数学公式结构。我的意思是,生成的括号之间的字符串将插入元素,然后我希望允许用户放置 数字和运算符。

我尝试绑定(bind) keydown事件,并使用 String.fromCharCode(e.which); 测试字符但对于键“+”或“-”(以及其他运算符),此函数返回按字母顺序排列的字符。没有成功。
然后,我终于决定使用 keyup事件,然后使用 RegExp 替换 <input />值(value)。

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


所以,我的问题如下:
如何构造一个 javascript RegExp,以删除所有在括号之间的字符,以及与 ()+-*/,. 不同的字符和 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 正则表达式支持更强大

关于javascript - 根据用户输入验证数学公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359102/

相关文章:

javascript - 如何使用 react-router 创建单页应用程序

javascript - 如何摆脱 NaN/NaN/NaN

javascript - 无法更改包含无序列表的 div 的背景

c# - 这个的正则表达式

regex - 简化正则表达式?

php - 正则表达式解析 imdb 页面并获取名称

javascript - 使用 Javascript 调用对象中的函数

javascript - 为使用相同处理程序动态创建的每个组件创建单独的状态

javascript - 单击按钮添加表行

javascript - Highcharts 鼠标跟踪/鼠标悬停功能在 chrome 上很慢,但在 firefox 或 IE 上并不慢