计算器正则表达式十进制

时间:2011-05-30 14:39:59

标签: javascript regex

我想要一个可以在一个简单的计算器中使用的正则表达式:

现在我有:this.field.value.match(/\./))

我的问题是我一次只能插入一个小数:

例如: 2.5 + 2 3 + 3.55

我希望能够选择添加2.5 + 2.5。关键是,我试图阻止某人输入2.5.5.5 + 5

6 个答案:

答案 0 :(得分:2)

对于2.5 + 2.5,您可以使用:

/[0-9]\+\.?[0-9]* + [0-9]\+\.?[0-9]*/

无论如何,请记住,正则表达式无法完全解析算术表达式,因为它是context free grammar并且正则表达式没有表达能力来覆盖它。

所以,我的正则表达式只是对你的案例的一个非常特别的建议。你可以肯定会进一步改进它。

答案 1 :(得分:2)

试试这个

/ *(\d+\.?\d*|\d*\.?\d+) *\+ *(\d+\.?\d*|\d*\.?\d+) */

匹配

1   + 1
1.0 + 1.0
1.  + 1.
0.1 + 0.1
.1  + .1

等等。

不匹配

.  + .
1  +
.1 +
1. +

依旧......

还匹配+符号与输入开头和结尾之间的空格。

答案 2 :(得分:1)

\d*(?:\.\d)?\d*\s*\+\s*\d*(?:\.\d)?\d*

匹配

12+2.4
.34 +2
12.34 + .34

但不匹配

12.34.2 + 2
12.+3

对乘法,除法等所需的其他二元运算符执行相同的操作。

答案 3 :(得分:1)

怎么样:

/^\s*([+-]?(?:\d+\.?\d*|\d*\.\d+))\s*([-+\/*])\s*([+-]?(?:\d+\.?\d*|\d*\.\d+))\s*$/
     ^--------- group 1 ---------^   ^group2 ^   ^--------- group 3 ---------^

捕获组:

group 1 will contain the first operand (maybe signed)
group 2 will contain the operator (-,+,/,*)
group 3 will contain the second operand (maybe signed)

答案 4 :(得分:1)

我想你可能会以错误的方式解决这个问题。 juse确保输入仅包含有效字符,然后尝试计算值,而不是尝试对可接受条目的每个可能组合进行正则表达式:

var result;
if(/^[0-9+\-()^*/ .]+$/.test(this.field.value))
  try{result=new Function("return "+s+";")();}catch(e){};
if(result==undefined) /* there is a problem */ else /* OK */

答案 5 :(得分:0)

好吧,如果你做一个简单的计算器,你必须更好地定义什么是简单的方法。为了我。这意味着您支持标准操作(+-/*),括号()整数和浮点数。

解决方案是:没有简单的方法!我的建议:要评估它,你将不得不解析它:将每个“数字”减少到一个检查很容易(\d+|\d*\.\d+),但检查整个结构很难用正则表达式(意思是,你最终会得到每次超级复杂和新的角落案例)

另一个简单的解决方案:检查它是否风险太大(例如匹配^[\d.+*/()]*$)并尝试eval - 使用它。

如果你的简单比我的简单,你可能会找到一个正则表达式,但这肯定不是最好的路径(尝试用正则表达式解析html有点蠢:你需要一个上下文解析器)