我正在尝试使用JavaScript编写简单的计算器。我想检查用户输入是否正确。我写了正则表达式,以确保用户输入正确,但它不起作用。我想要做的是一个简单的规则,运算符(/ * - +)后面应该是操作数(0-9),但第一个运算符可以是 - 或+。下面的正则表达式不起作用。我的错是什么?
^[-+]?[0-9]{0,}([-+*/]?)[0-9]+$
答案 0 :(得分:4)
您的表达式会查找可选的-
或+
,后跟零或更多位数([0-9]{0,}
)。我想你可能想要一个或多个(+
)。同样,?
中的([-+*/]?)
会使运算符可选。您可能还想捕获各个部分。
当我在两个操作数之间有一个操作符时,这很好,但是当我执行9 + 9 + 9时,它超过两个操作数就不起作用。
如果您想允许其他操作符和数字跟随它们,则必须允许后一部分重复。
这是我的粗略观点:
^\s*([-+]?)(\d+)(?:\s*([-+*\/])\s*((?:\s[-+])?\d+)\s*)+$
Live Example (但如果您有三个或更多条款,捕获组会发生一些不太正确的事情。)
我所做的改变:
使用\d
而不是[0-9]
(\d
代表“数字”)
将数字和运算符放在捕获组中。
不要使数字或运算符可选。
在不同的地方允许可选的空格(\s*
)。
(?: _________ )+
让那些parens中的部分重复。
在第二组数字前面留出-
或+
,但前提是在操作符后面有空格。
答案 1 :(得分:1)
^[-+]?
是正确的,但是
[0-9]{0,}
不是,你想要+量词,好像你使用{0,}(与*相同),你可以拥有" + * 9"是正确的。 然后,
([-+*/]?)[0-9]+
错了,你想要:
([-+*/]+[-+]?[0-9]+)*
所以你会得到例如* -523 + 4234 / -34(你可以在一个负数或正数上使用一个操作数,或者不是精确数字,这意味着显然是正数)
最后,你会有类似的东西:
^[-+]?[0-9]+([-+*/]+[-+]?[0-9]+)*$
当然,你可以用\ d
替换class [0-9]