Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的正则表达式正负双精度_Java_Regex_Validation - Fatal编程技术网

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@jeanr
try
/
catch
实际上可能相对昂贵。同样,这对于OP来说也不起作用,因为像0001这样的东西是一个完全有效的double,但他想拒绝它。可能的重复可以使用:
^[-+]?[1-9]\d*(?:\。?\d+)$
为什么不在try-catch块中使用double.parseDouble(myString)?这并不是感谢您找到的。anubhava@jeanr
try
/
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