Java 检查字符串是否为正自然数的正则表达式

Java 检查字符串是否为正自然数的正则表达式,java,regex,Java,Regex,我想检查字符串是否为正自然数,但我不想使用Integer.parseInt(),因为用户可能输入大于int的数字。相反,如果数字字符串包含所有“0”字符,我更希望使用正则表达式返回false if(val.matches("[0-9]+")){ // We know that it will be a number, but what if it is "000"? // what should I change to make sure // "At Least 1

我想检查字符串是否为正自然数,但我不想使用
Integer.parseInt()
,因为用户可能输入大于int的数字。相反,如果数字字符串包含所有“0”字符,我更希望使用正则表达式返回false

if(val.matches("[0-9]+")){
    // We know that it will be a number, but what if it is "000"?
    // what should I change to make sure 
    // "At Least 1 character in the String is from 1-9"
}
注意:字符串只能包含
0
-
9
,不能包含所有
0
s;换句话说,它必须在
[1-9]

中至少包含1个字符。如果您试图处理任意大的整数,最好使用,但是以下模式应匹配至少包含一个非零字符的一系列数字

\d*[1-9]\d* 

Debugex的单元测试似乎有点问题,但您可以在那里使用该模式。它非常简单,应该具有合理的跨语言兼容性,但在Java中,您需要避开它

Pattern positiveNumber = Pattern.compile("\\d*[1-9]\\d*");

注意上述(有意)匹配的字符串,我们通常不会考虑“正自然数”,因为一个有效的字符串可以从一个或多个<代码> 0 /代码> s开始,例如<代码> 000123 < /代码>。如果不想匹配这些字符串,可以进一步简化模式

[1-9]\d*    


如果要匹配以标准方式编写的、不带前导零的正自然数,则需要的正则表达式是

[1-9]\d*

它匹配仅由数字组成的任何字符串,其中第一个数字不是零。如果您将反斜杠(
“[1-9]\\d*”
)编写为Java字符串文字,请不要忘记将其加倍。

@AlexandreSantos此正则表达式拒绝“0”,因此它可以工作。它可以工作于0,非常简单的解决方案,thax u very muxh dimoth匹配“092383”。这应该被允许吗?如果这是允许的,那么“+92383”不也应该被允许吗?<代码> \+[\**[1-9] \d*< /代码>?我不希望+中的“公平”,<代码> 092383 > /代码>通常不被认为是自然数的有效表示。你能解释一下“正数”是什么意思吗?
2.5
是正数吗?关于π?更新-->正自然数
[1-9]\d*