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

时间:2014-07-09 04:46:35

标签: 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 character in the String is from 1-9"
}

注意:该字符串必须仅包含0 - 9,并且不得包含所有0;换句话说,它必须在[1-9]中至少有一个字符。

2 个答案:

答案 0 :(得分:6)

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

\d*[1-9]\d* 

Regular expression visualization

Debuggex Demo

Debugex的单元测试似乎有些小问题,但你可以在那里玩这种模式。它很简单,它应该是合理的跨语言兼容,但在Java中,你需要逃避它。

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

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

[1-9]\d*    

Regular expression visualization

Debuggex Demo

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

答案 1 :(得分:2)

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

[1-9]\d*

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