【问题标题】:Validation of a mathematical formula based on user input基于用户输入验证数学公式
【发布时间】:2012-07-06 17:29:15
【问题描述】:

我知道 SO 不是一个代码生成器,但我打破了我的脑袋,我会被这个 RegExp 弄疯的。

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

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

        $("#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)"

如果您有一些想法,我愿意以另一种方式实现我的目标。 谢谢!

【问题讨论】:

  • 如果您想检查括号的平衡性,正则表达式将无法完成这项工作。你需要一个更复杂的解析器。

标签: javascript jquery regex math


【解决方案1】:

你可以试试这样的:

var re = /[^\]\d\(\)+\-*\/,.]+(?=[^\[\]\(\)]*(?:\[|\(|$))/g;
$("#inputID").keyup(function(){
    this.value = this.value.replace(re, "");
});

但请记住,您必须确保括号结构与您的语法一致。

建议:使用RegExr 测试您的正则表达式,但请记住它比Javascript 正则表达式支持更强大

【讨论】:

  • 我不能为你的帖子投票,但你拯救了我的一天!正如您所说,下一步是验证公式的全局结构。谢谢 ! (并为链接 +1)
  • 不客气。我只是做了一个小的编辑(将\) 两次放入第一个[...] 组),但它仍然可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 2017-09-11
相关资源
最近更新 更多