我正在尝试验证一个简单的算术表达式,以确保它适合格式操作数运算符操作数:234.34 + 5.我想出了如何足够简单地验证这一点,但我希望用户能够继续输入2个以上的值如:234.34 + 5/6*7 - -34.到目前为止,我的正则表达式如下:
[-]*\d+[.\d+[E\d+]*]*[\s+[*+/-]\s+[-]*\d+[.\d+[E\d+]*]*]*
Run Code Online (Sandbox Code Playgroud)
这部分有效,但我遇到的问题是它允许一些我不想要的奇怪的东西,如-4.34.1 - 34 +
有什么建议?
试试这个.它很难看,但它应该有效(如果你没有使用任何括号):
-?\d+(?:\.\d+(?:E\d+)?)?(\s*[-+/\*]\s+-?\d+(?:\.\d+(?:E\d+)?)?)+
Run Code Online (Sandbox Code Playgroud)
说明
这将数字一个数字后跟一个运算符和一个数字无限期
-?\d+(?:\.\d+(?:E\d+)?)? 匹配一个号码(
\s* 可选的空格[-+/\*]任何运营商:+,-,*,/\s+ 至少一个空格(以避免--b)-?\d+(?:\.\d+(?:E\d+)?)? 匹配另一个号码)+ 重复此块一次或多次数字表达式:
-? 可选的 -\d+ 数字(一个或多个)(?: 可选部分的开始
\. 点 \d+ 数字(?: 开始选择科学记数部分
Echar\d+ 匹配digitx)? 关闭可选的科学notatotion部分)? 关闭可选组 但我强烈建议尝试为此编写一个合适的解析器,它也将允许支持括号:a + (b + c).