2014-01-16 2 views
2

1 ~ 100 사이의 숫자 만 허용하는 REGEX를 작성하려고합니다. 그것이 1에서 무한대까지 모든 것을 받아들이면 좋을 것입니다. 그러나 그것은 아마도 복잡하거나 불가능할 것입니다. 이 무한대 일에 이르기까지 모든 것을 수용하는 경우Java REGEX (숫자 1 ~ 100)

public static boolean isNumeric(String str) { 
return str.matches("-?\\d+(\\.\\d+)?"); 
}//end boolean. 
+1

왜이 작업에는 정규식을 사용하고 싶습니까? 'str'을'int'로 변환하고 범위를 확인하십시오. 그것은 훨씬 쉬울 것입니다. –

+0

@RohitJain을 사용하면 예외가 throw 될 수 있습니다. – marisbest2

답변

3

그것은 좋은 것입니다,하지만 복잡한 아마 - 또는 불가능합니다.

단순히 "[1-9]\\d*"은 어떻습니까?

이것은 0이 아닌 숫자와 임의의 숫자 순서를 허용합니다. 즉, 양의 정수입니다.

+0

입력이 문자열이기 때문에 "007"과 같이 문자열에 0이 포함될 수 있습니다. 더 좋은 대답은 입니다. 0 * [1-9] \\ d *' – Jorge

3
public static boolean isNumeric(String str) throws NumberFormatException { 
    int i = Integer.parseInt(str); 
    return i > 0 && i < 100; //Arbitrary numbers within range of int 
} 

정규 표현식을 사용하지 않지만 동일한 작업을 수행해야합니다. 문자열을 정수로 변환 한 다음 원하는 범위에 있는지 확인하십시오.

+1

이렇게됩니다. 문자열에 숫자가 아닌 문자가 포함되어 있으면 예외를 throw합니다. – Dodd10x

+2

두 번 구문 분석이 필요하지 않으며'NumberFormatException'을 사용하여 try catch로 래핑하고 OP에서 무한대를 원할 경우 정수가 오버플로 될 수 있습니다. –

+0

두 가지 의견이 모두 사실입니다. 이는 도움이 될만한 방향으로 그를 안내 할 수있는 빠르고 간단한 예였습니다. 나는 그 문제를 곧 수정하기 위해 편집 할 것이다. – csmckelvey

1

실제로 철저히하고 싶다면 "-?(0|([1-9][0-9]*))\.?[0-9]*"을 사용하면 모든 숫자를 -infinity에서 + inifinity로 줄 수 있습니다. -?을 제거하면 모든 양수가 제공됩니다. "0|(-?[1-9][0-9]*)"은 -infinity에서 + infinity까지의 모든 정수를 제공해야합니다. "[1-9][0-9]*"은 0보다 큰 정수를 모두 제공합니다.