^\d+$
허용하지 않도록 개선 할 수 있는 방법은 0
무엇입니까?
편집 (더 구체적으로 작성) :
예 있도록 :
1
30
111
수 없도록 예 :
0
00
-22
앞에 0이있는 양수가 허용되는지 여부는 중요하지 않습니다 (예 :) 022
.
이것은 Java JDK Regex 구현을위한 것입니다.
답변:
^[1-9]+$
작동 하지 않습니까?
^[1-9]+$
허용하지 않을 10
^[1-9]+$
는 허용하지 않습니다 10
. @Mulmoth는 0 회 이상 일치 1
하므로 제안이 허용 \d*
합니다. 그러나 .로 076
시작하지 않기 때문에 [1-9]
.
01
어떨까요?
늦게 와서 미안하지만 OP는 허용하길 원 076
하지만 아마도 허용하고 싶지 않을 것입니다 0000000000
.
따라서이 경우에는 0이 아닌 하나 이상의 숫자를 포함 하는 문자열이 필요합니다 . 그건
^[0-9]*[1-9][0-9]*$
^[0-9]*[1-9][0-9]*(\.[0-9]+)$
하지만 그것은 "십진수"가 의미하는 바에 대한 가정을하고 있습니다. 지수 부분이 필요합니까? 이것은 꽤 복잡하므로 다른 질문을하십시오.
^0*[1-9]\d*$
합니다. 첫 번째 패턴은 0이 아닌 첫 번째를 찾을 [0-9]*
때까지만 활성화됩니다. [1-9]
즉, 초기 0이있을 때까지만 활성화됩니다 ( 0*
).
이것을 시도하십시오. 이것은 요구 사항을 충족시키기 위해 가장 잘 작동합니다.
[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
[1-9]\d*
.
0을 제외한 ^\+?[1-9]\d*$
모든 양의 정수 : 0을 포함한 모든 양의 정수 :^(0|\+?[1-9]\d*)$
당신은 이것을 원할 수 있습니다 (편집 : 양식의 수를 허용하십시오 0123
) :
^\\+?[1-9]$|^\\+?\d+$
하지만 나라면 대신
int x = Integer.parseInt(s)
if (x > 0) {...}
Integer.parseInt()
그 자체로 오버 헤드가 거의 발생하지 않습니다. 비용이 많이 드는 예외를 던지고 잡는 것입니다.
\\+?
접두사에 대한 거래는 무엇 입니까? Java 소스 코드에 표시되는 것처럼 이스케이프 된 더하기 기호 여야한다고 생각하는데, 그 이유는 무엇입니까? 마이너스 기호가 허용되지 않으면 플러스 기호도 나와 있다고 가정하는 것이 안전하다고 생각합니다.
내 패턴은 복잡하지만 정확히 "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]))$
^ [1-9] * $는 제가 생각할 수있는 가장 간단한 단어입니다.
10
하고 29303
. 빈 문자열과도 일치합니다.
소수> 0 만 허용해야합니다.
^([0-9]\.\d+)|([1-9]\d*\.?\d*)$
076
하시겠습니까?