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