如何使用javascript的计算器输入使用正则表达式?

时间:2014-06-15 21:26:23

标签: javascript regex

我正在尝试使用JavaScript编写简单的计算器。我想检查用户输入是否正确。我写了正则表达式,以确保用户输入正确,但它不起作用。我想要做的是一个简单的规则,运算符(/ * - +)后面应该是操作数(0-9),但第一个运算符可以是 - 或+。下面的正则表达式不起作用。我的错是什么?

^[-+]?[0-9]{0,}([-+*/]?)[0-9]+$

2 个答案:

答案 0 :(得分:4)

您的表达式会查找可选的-+,后跟或更多位数([0-9]{0,})。我想你可能想要一个或多个(+)。同样,?中的([-+*/]?)会使运算符可选。您可能还想捕获各个部分。

  

当我在两个操作数之间有一个操作符时,这很好,但是当我执行9 + 9 + 9时,它超过两个操作数就不起作用。

如果您想允许其他操作符和数字跟随它们,则必须允许后一部分重复。

这是我的粗略观点:

^\s*([-+]?)(\d+)(?:\s*([-+*\/])\s*((?:\s[-+])?\d+)\s*)+$

Live Example (但如果您有三个或更多条款,捕获组会发生一些不太正确的事情。)

我所做的改变:

  1. 使用\d而不是[0-9]\d代表“数字”)

  2. 将数字和运算符放在捕获组中。

  3. 不要使数字或运算符可选。

  4. 在不同的地方允许可选的空格(\s*)。

  5. (?: _________ )+让那些parens中的部分重复。

  6. 在第二组数字前面留出-+,但前提是在操作符后面有空格。

答案 1 :(得分:1)

^[-+]?

是正确的,但是

[0-9]{0,}

不是,你想要+量词,好像你使用{0,}(与*相同),你可以拥有" + * 9"是正确的。 然后,

([-+*/]?)[0-9]+

错了,你想要:

([-+*/]+[-+]?[0-9]+)*

所以你会得到例如* -523 + 4234 / -34(你可以在一个负数或正数上使用一个操作数,或者不是精确数字,这意味着显然是正数)

最后,你会有类似的东西:

^[-+]?[0-9]+([-+*/]+[-+]?[0-9]+)*$

当然,你可以用\ d

替换class [0-9]