"0을 제외한 모든 양의 정수"의 정규식은 무엇입니까?


93

^\d+$허용하지 않도록 개선 할 수 있는 방법은 0무엇입니까?

편집 (더 구체적으로 작성) :

예 있도록 :
1
30
111
수 없도록 예 :
0
00
-22

앞에 0이있는 양수가 허용되는지 여부는 중요하지 않습니다 (예 :) 022.

이것은 Java JDK Regex 구현을위한 것입니다.


2
예를 들어, 수락 076하시겠습니까?
칼 Knechtel - 집을

@Karl Knechtel :하지만 단순성을 위해이 기능을 희생 할 수 있습니다.
Zeemee

3
"0을 제외한 모든 양의 정수"는 0이 양의 정수가 아니라는 점에 유의하십시오.
SK9 2014

답변:


180

이 시도:

^[1-9]\d*$

... 그리고 30자를 초과하는 패딩 SO 대답 제한 :-).

여기 데모입니다


호기심 때문에 마지막에 \ d +가 필요한 이유는 무엇입니까? 왜 ^[1-9]+$작동 하지 않습니까?
mtahmed 2011-08-12

18
@mtahmed : ^[1-9]+$허용하지 않을 10
거짓말 라이언

1
1을 허용합니다. "\ d *"도 빈 문자열과 일치합니다.
다니엘

@mtahmed ^[1-9]+$는 허용하지 않습니다 10. @Mulmoth는 0 회 이상 일치 1하므로 제안이 허용 \d*합니다. 그러나 .로 076시작하지 않기 때문에 [1-9].
칼 Knechtel - 집을

2
하지만 01어떨까요?
Museful

72

늦게 와서 미안하지만 OP는 허용하길 원 076하지만 아마도 허용하고 싶지 않을 것입니다 0000000000.

따라서이 경우에는 0이 아닌 하나 이상의 숫자를 포함 하는 문자열이 필요합니다 . 그건

^[0-9]*[1-9][0-9]*$

이는 영업 이익이 원하는 것을 성취하는 것
압둘

양의 정수와 양의 십진수를 원합니다. 해결책이 있습니까?

의견보다는 새로운 질문으로 물어봐야합니다. 하지만 스포일러 : ^[0-9]*[1-9][0-9]*(\.[0-9]+)$하지만 그것은 "십진수"가 의미하는 바에 대한 가정을하고 있습니다. 지수 부분이 필요합니까? 이것은 꽤 복잡하므로 다른 질문을하십시오.
Ray Toal 2015

1
코너 케이스 고려에 +1! BTW이 패턴은 정확히 동일하게 작동 ^0*[1-9]\d*$합니다. 첫 번째 패턴은 0이 아닌 첫 번째를 찾을 [0-9]*때까지만 활성화됩니다. [1-9]즉, 초기 0이있을 때까지만 활성화됩니다 ( 0*).
mg007 2016-08-09

1
이것이 정답입니다. 질문에 따라 올바른 동작 인 00098을 허용합니다.
Varun Sharma


12

이것을 시도하십시오. 이것은 요구 사항을 충족시키기 위해 가장 잘 작동합니다.

[1-9][0-9]*

다음은 샘플 출력입니다.

String 0 matches regex: false
String 1 matches regex: true
String 2 matches regex: true
String 3 matches regex: true
String 4 matches regex: true
String 5 matches regex: true
String 6 matches regex: true
String 7 matches regex: true
String 8 matches regex: true
String 9 matches regex: true
String 10 matches regex: true
String 11 matches regex: true
String 12 matches regex: true
String 13 matches regex: true
String 14 matches regex: true
String 15 matches regex: true
String 16 matches regex: true
String 999 matches regex: true
String 2654 matches regex: true
String 25633 matches regex: true
String 254444 matches regex: true
String 0.1 matches regex: false
String 0.2 matches regex: false
String 0.3 matches regex: false
String -1 matches regex: false
String -2 matches regex: false
String -5 matches regex: false
String -6 matches regex: false
String -6.8 matches regex: false
String -9 matches regex: false
String -54 matches regex: false
String -29 matches regex: false
String 1000 matches regex: true
String 100000 matches regex: true

2
감사합니다. 그러나 받아 들여진 답변과 비교할 때 가치 나 우아함을 더하지 않습니다 [1-9]\d*.
Zeemee

1
\ d로 올바르지 않은 @Zeemee에는 0-9가 아닌 숫자가 포함될 수 있습니다. 예를 들어 일부 라이브러리의 واحد과 같은 아라비아 숫자.
dummyDev

@dummyDev 나는 그것을 인식하지 못했습니다. 언급 해주셔서 감사합니다!
Zeemee

슬프게도 "123abcd"에 대해 true를 반환합니다.
Charith Jayasanka

Charith Jayasanka-그래, 여전히 처음에는 ^가 필요하고 끝에는 "$"가 필요합니다. :-)
Steve Baroti

7

^\d*[1-9]\d*$

앞에 0으로 채워져 있어도 모든 양수 값을 포함 할 수 있습니다.

허용

1

01

10

11 등

허용하지 않습니다

0

00

000 등 ..


3

0을 제외한 ^\+?[1-9]\d*$
모든 양의 정수 : 0을 포함한 모든 양의 정수 :^(0|\+?[1-9]\d*)$


2

이거 있어요 :

^[1-9]|[0-9]{2,}$

누군가 이길까요? :)


3
이렇게 00하면 원하십니까? 그리고 그것은 1aaaaaabcd01. 이 문제를 해결하기 위해 ^첫 번째 대안에만 속 $하고 두 번째 대안에만 속합니다^([1-9]|[0-9]{2,})$
stema

글쎄, 이것은 000000000. 0을 제외한 모든 정수를 말했습니다 .
레이 톨

2

재미로, 미리보기를 사용하는 또 다른 대안 :

^(?=\d*[1-9])\d+$

원하는만큼 자릿수이지만 적어도 하나는이어야합니다 [1-9].


2

당신은 이것을 원할 수 있습니다 (편집 : 양식의 수를 허용하십시오 0123) :

^\\+?[1-9]$|^\\+?\d+$

하지만 나라면 대신

int x = Integer.parseInt(s)
if (x > 0) {...}

1
두 가지 문제 : "123abc"와도 일치하고 123을 반환하며 ParseException이 발생할 수 있습니다.
다니엘

@Daniel : 이것이 더 큰 구문 분석 체계 내에서 사용될 수 있다고 생각하므로 숫자 만 캡처하는 정규식 / BNF와 캡처 된 숫자가 0이 아닌 양수인지 확인하는 Java 코드가있을 것입니다.
Lie Ryan

@Daniel : 어떤 경우에도 데이터가 정수로 필요하므로 조만간 parseInt ()를 호출하거나 자신의 parseInt ()를 롤링해야합니다.
Lie Ryan

@ 다니엘 : Integer.parseInt()그 자체로 오버 헤드가 거의 발생하지 않습니다. 비용이 많이 드는 예외를 던지고 잡는 것입니다.
Alan Moore

@Lie : \\+?접두사에 대한 거래는 무엇 입니까? Java 소스 코드에 표시되는 것처럼 이스케이프 된 더하기 기호 여야한다고 생각하는데, 그 이유는 무엇입니까? 마이너스 기호가 허용되지 않으면 플러스 기호도 나와 있다고 가정하는 것이 안전하다고 생각합니다.
Alan Moore

0

이 RegEx는 0 중 정수 양수와 일치합니다.

(?<!-)(?<!\d)[1-9][0-9]*

음수임을 나타내는 숫자 앞의 마이너스를 검색하는 두 개의 음수 lookbehind와 함께 작동합니다. -9보다 큰 음수 (예 : -22)에도 적용됩니다.


0

내 패턴은 복잡하지만 정확히 "0을 제외한 모든 양의 정수"(1-2147483647, 길지 않음)를 포함합니다. 십진수 용이며 선행 0을 허용하지 않습니다.

^((1?[1-9][0-9]{0,8})|20[0-9]{8}|(21[0-3][0-9]{7})|(214[0-6][0-9]{6})
|(2147[0-3][0-9]{5})|(21474[0-7][0-9]{4})|(214748[0-2][0-9]{3})
|(2147483[0-5][0-9]{2})|(21474836[0-3][0-9])|(214748364[0-7]))$

-2

^ [1-9] * $는 제가 생각할 수있는 가장 간단한 단어입니다.


이 정규 표현식은 잘못 등 번호와 일치 할 수 없게됩니다 10하고 29303. 빈 문자열과도 일치합니다.
OmnipotentEntity 2013

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.