正则表达式,用于检查String是否为正自然数

我想检查字符串是否为正数,但我不想使用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" } 

注意:字符串必须只包含09 ,并且不能包含全部0 ; 换句话说,它必须在[1-9]中至少有一个字符。

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

 \d*[1-9]\d* 

正则表达式可视化

Debuggex演示

Debugex的unit testing看起来有些小问题,但你可以在那里玩模式。 它很简单,它应该是合理的跨语言兼容,但在Java中你需要逃避它。

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

注意上面(故意)匹配我们通常不会认为是“正自然数”的字符串,因为有效字符串可以以一个或多个0开始,例如000123 。 如果您不想匹配此类字符串,则可以进一步简化模式。

 [1-9]\d* 

正则表达式可视化

Debuggex演示

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

如果你想匹配以标准方式编写的正自然数,而没有前导零,那么你想要的正则表达式就是

 [1-9]\d* 

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