[英]How to use regular expression for calculator input with javascript?
我正在尝试用JavaScript编写简单的计算器。 我想检查用户输入是否正确。 我写了正则表达式,以确保用户输入正确,但它不起作用。 我想要做的是一个简单的规则,运算符(/ * - +)后面应该是操作数(0-9),但第一个运算符可以是 - 或+。 下面的正则表达式不起作用。 我的错是什么?
^[-+]?[0-9]{0,}([-+*/]?)[0-9]+$
您的表达式查找可选-
或+
后跟零或更多数字( [0-9]{0,}
)。 我想你可能想要一个或多个( +
)。 同样, ?
in ([-+*/]?)
使操作符可选 。 您可能还想捕获各个部分。
当我在两个操作数之间有一个操作符时,这很好,但是当我执行9 + 9 + 9时,它更多的是两个操作数。
如果要允许其后的附加运算符和数字,则必须允许后一部分重复。
这是我的粗略看法:
^\s*([-+]?)(\d+)(?:\s*([-+*\/])\s*((?:\s[-+])?\d+)\s*)+$
实例 (但如果您有三个或更多术语,那么捕获组会发生一些不太正确的事情。)
我做的改变:
使用\\d
而不是[0-9]
( \\d
代表“数字”)
将数字和运算符放在捕获组中。
不要使数字或运算符可选。
在不同的地方允许可选的空格( \\s*
)。
(?: _________ )+
是让那些parens中的部分重复的原因。
在第二组数字前面允许-
或+
,但前提是在运算符后面有空格。
^[-+]?
是正确的,但随后
[0-9]{0,}
不是,你想要+量词,好像你使用{0,}(与*相同),你可以让“+ * 9”正确。 然后,
([-+*/]?)[0-9]+
是错的,你想:
([-+*/]+[-+]?[0-9]+)*
所以你将拥有例如* -523 + 4234 / -34(你可以在一个负数或正数上使用一个操作数,或者不使用精确数字,这意味着明显是正数)
最后,你会有类似的东西:
^[-+]?[0-9]+([-+*/]+[-+]?[0-9]+)*$
当然,您可以用\\ d替换class [0-9]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.