java中的正则表达式正负双精度
我需要一个正则表达式来验证正负双精度。我尝试了以下正则表达式:java中的正则表达式正负双精度,java,regex,validation,Java,Regex,Validation,我需要一个正则表达式来验证正负双精度。我尝试了以下正则表达式: ^[-+]?\\d+(\\.{0,1}(\\d+?))?$ 但它允许前导0(例如01和00)。如何修改正则表达式,使其不允许前导0?下面是一个示例(.NET语法,在Java中也应该可以): 基本上,它有一个可选的+或-符号,后跟0或1-9之间的数字,后跟任意数量的数字。或者,它可以包含一个小数点,后跟一个或多个数字 这个正则表达式最重要的一点(这就是解决问题的地方)是它增加了一个限制,即多位数不能以0开头-可以有正好等于0的值,但
^[-+]?\\d+(\\.{0,1}(\\d+?))?$
但它允许前导0(例如01和00)。如何修改正则表达式,使其不允许前导0?下面是一个示例(.NET语法,在Java中也应该可以):
基本上,它有一个可选的+或-符号,后跟0或1-9之间的数字,后跟任意数量的数字。或者,它可以包含一个小数点,后跟一个或多个数字
这个正则表达式最重要的一点(这就是解决问题的地方)是它增加了一个限制,即多位数不能以0开头-可以有正好等于0的值,但不能有000010.1或0000.0之类的值。类似于0、0.0或100.1的东西就可以了。这里有一个例子(.NET语法,在Java中也应该可以):
基本上,它有一个可选的+或-符号,后跟0或1-9之间的数字,后跟任意数量的数字。或者,它可以包含一个小数点,后跟一个或多个数字
这个正则表达式最重要的一点(这就是解决问题的地方)是它增加了一个限制,即多位数不能以0开头-可以有正好等于0的值,但不能有000010.1或0000.0之类的值。类似于0、0.0或100.1的值就可以了。这里是另一种选择,如果需要,它可以处理指数:
^[+-]?([1-9][0-9]*|0)(\.[0-9]+)?((e|E)[+-]?[0-9]+)?$
我刚刚意识到,它本质上与带有指数加法的@EJoshuaS相同
下面是一个验证链接:
这里是另一种选择,如果您需要,它可以处理指数:
^[+-]?([1-9][0-9]*|0)(\.[0-9]+)?((e|E)[+-]?[0-9]+)?$
我刚刚意识到,它本质上与带有指数加法的@EJoshuaS相同
下面是一个验证链接:
您可以使用:
^[-+]?[1-9]\d*(?:\。?\d+)$
为什么不在try-catch块中使用Double.parseDouble(myString)?您发现这并不是感谢您。anubhava@jeanrtry
/catch
实际上可能相对昂贵。同样,这对于OP来说也不起作用,因为像0001这样的东西是一个完全有效的double,但他想拒绝它。可能的重复可以使用:^[-+]?[1-9]\d*(?:\。?\d+)$
为什么不在try-catch块中使用double.parseDouble(myString)?这并不是感谢您找到的。anubhava@jeanrtry
/catch
实际上可能相对昂贵。同样,这对于OP来说也不起作用,因为像0001这样的东西是一个完全有效的双精度体,但他想拒绝它。Java中反斜杠的可能重复需要用反斜杠转义,因此\d
和\。
需要更改为\\d
和\.
(否则Java认为您正在使用反斜杠作为转义字符,并且它不会传递给正则表达式引擎)。对于其余部分,是的,它与Java兼容。@psilos您可能必须将\替换为\(我是在.NET而不是Java中测试的)。谢谢你们两位。正确的是**^[+-]?([1-9]\\d*)0)(\\\.\\d+)?**在Java中。很抱歉我的答案的bed格式。在Java中,反斜杠需要用反斜杠转义,因此\d
和\。
需要更改为\\d
和\.
。(否则Java认为您使用反斜杠作为转义字符,它不会传递给正则表达式引擎)。对于其余的,是的,它是Java兼容的。@p您可能需要将\替换为\(我是在.NET而不是Java中测试的)。谢谢你们两位。正确的是**^[+-]([1-9]\\d*)0)(\\\.\\d+)?**Java版本。很抱歉我的答案采用bed格式。我喜欢regex101的链接。请注意,它还一步一步地解释了regex,这是OP了解的好工具。这与1.2
不匹配。我喜欢regex101的链接。请注意,它还一步一步地解释了regex,这是OP了解的好工具。这与1.2