2011-05-13 29 views
3

我目前使用「(\ d){1,9}」,但它無法使諸如「0134」之類的數字無效。該表達式只能驗證INTEGERS爲正的數字。謝謝。正則整數的Java正則表達式(不包括那些以零開始的)

+0

如果您想防止超限,那麼這是不合理的。 (2 147 483 648及更高)。 – 2011-05-13 23:57:55

+0

我想我只需要確保字符串只包含數字而不包含任何其他種類的字符(如+, - ,&,等),並且它不以零開頭。 – skyork 2011-05-14 00:33:42

+0

但是你將它限制在9個地方。如果你想包含long或BigInteger,那就不合適,但是「[1-9] [0-9] *」 - 如果它旨在避免超出範圍 - 它只會偶爾工作。它可能會超過78%的可能數字。 :) – 2011-05-14 02:09:18

回答

6

現在你使用表達式[0-9]{1,9},所以這顯然允許數字0134。當你想要求第一個字符不是零時,你必須使用[1-9][0-9]{0,8}

順便說一句:0134 一個正整數。它是一個整數,並且是正數。 ;)

編輯:

爲了防止整數溢出你可以用這個模式:

  • [1-9][0-9]{0,8}
  • [1-1][0-9]{9}
  • [2-2][0-1][0-9]{8}
  • [2-2][1-1][0-3][0-9]{7}
  • [2-2][1-1][4-4][0-6][0-9]{6}
  • ...

我覺得你的想法。然後你將這些表達式與|結合起來,就完成了。

另外,看看Integer.valueOf(String)方法,它是如何分析數字和檢查溢出。複製該代碼並使用NumberFormatException更改零件。

5

您可以使用正則表達式象下面這樣:

^(?!^0)\d{1,9}$ 

你的意思是說是正整數無前導零我相信。

+0

這似乎不被接受爲Java中的有效正則表達式字符串... – skyork 2011-05-14 00:36:05

+2

您可能不得不用Java替換\\ \\。我只是給出了正則表達式。 – manojlds 2011-05-14 00:41:56