0보다 큰 숫자에 대한 정규식?
MVC의 모델에 유효성 검사를 적용하고 Regex를 사용하여 수행하고 싶습니다.
제출시 내 모델의 ID가 0보다 큰지 확인하려고합니다.
MVC가 어떤 관련이 있는지 모르겠지만 ID가 정수인 경우이 BRE는 다음을 수행해야합니다.
^[1-9][0-9]*$
정수가 아닌 실수 (부동 수)를 일치 시키려면 위의 경우와 함께 정상적인 십진수 (예 : 2.5
또는 3.3̅
), 패턴이 0과 1 사이 인 경우 (예 :) 및 다음과 0.25
같은 경우를 처리해야합니다. 패턴에는 0 인 소수 부분이 2.0
있습니다. (예 :) . 그리고 그 동안 정수 (예 :)에서 선행 0에 대한 지원을 추가합니다 005
.
^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$
이 두 번째 것은 확장 RE입니다. 같은 것을 Basic RE로 표현할 수 있지만 요즘 거의 모든 것이 ERE를 이해합니다. 표현을 소화하기 쉬운 부분으로 나누자.
^(
캐럿은 줄의 시작 부분에있는 null과 일치하므로 캐럿이있는 정규식 앞에는 줄의 시작 부분에 고정됩니다. 여는 괄호는 아래의 or-bar 때문에 있습니다. 나중에 더 자세히 설명하겠습니다.
0*[1-9][0-9]*(\.[0-9]+)?
이것은 모든 정수 또는 1 이상의 부동 소수점 숫자 와 일치합니다 . 따라서 우리 2.0
는 일치하지만 일치 0.25
하지 않습니다. 0*
그래서, 맨 앞에 0을 시작 핸들에서 005 == 5
.
|
파이프 문자는 이 컨텍스트에서 " or-bar "입니다. 이 표현식의 평가를 위해 다른 모든 것보다 우선 순위가 높으며 두 개의 정규 표현식을 효과적으로 결합합니다. 괄호는 또는 막대로 구분 된 여러 표현식을 그룹화하는 데 사용됩니다.
그리고 두 번째 부분 :
0+\.[0-9]*[1-9][0-9]*
이는 하나 이상의 0
문자로 시작하는 숫자 ( 0 개 이상의 0과 일치하도록 대체 ), 마침표, . 이 아닌 숫자를 포함하는 숫자 문자열이 뒤 따르는 모든 숫자 +
와 *
일치 .25
합니다 0
. 따라서 이것은 위와 0
아래의 모든 것과 일치 합니다 1
.
)$
마지막으로 캐럿이 줄의 시작 부분에 고정되는 것처럼 괄호를 닫고 정규식을 달러 기호가있는 줄 끝에 고정합니다.
물론, 프로그래밍 언어가 정규 표현식과 비교하지 않고 수치 적으로 무언가를 평가하도록하면 두통 과 CPU를 절약 할 수 있습니다.
이것에 대해 : ^[1-9][0-9]*$
암호:
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$
가장 좋은 해결책은 정규 표현식의 두 괄호 사이에 + 기호를 추가하는 것입니다.
^[1-9]+[0-9]*$
음이 아닌 정수만 원하는 경우 다음을 시도하십시오. ^\d+$
또 다른 해결책 :
^[1-9]\d*$
\d
에 상응하는 [0-9]
당신은 간다 :
MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");
제출시 :
if(myMatches.Count > 0)
{
//do whatever you want
}
나는 이것을 시도했고 0보다 큰 모든 십진수 / 정수에 대해 나를 위해 일했습니다.
공백 허용 : ^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
공백 없음 : ^(?=.*[1-9])\d*(?:\.\d{1,2})?$
아래 표현식을 사용할 수 있습니다.
(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)
유효한 항목 : 1 1. 1.1 1.0 모든 양의 실수
잘못된 항목 : 모든 음의 실수 및 0 및 0.0
간단한 대답은 다음과 같습니다. ^[1-9][0-9]*$
소수 둘째 자리에 대해서만 단순화되었습니다.
^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
참고 : https://www.regextester.com/94470
나는 이것이 완벽하게 작동한다고 생각합니다.
([1-9][0-9]*(\.[0-9]*[1-9])?|0\.[0-9]*[1-9])
유효한:
1
1.2
1.02
0.1
0.02
유효하지 :
0
01
01.2
1.10
[1-9]\.\d{1,2}|0\.((0?[1-9])|([1-9]0?)){1,2}\b
이에 대한 매우 간단한 대답은 다음을 사용합니다. \ d *
참고 URL : https://stackoverflow.com/questions/9038522/regular-expression-for-any-number-greater-than-0
'programing tip' 카테고리의 다른 글
for 루프, 특히 for (;;)는 어떻게 작동합니까? (0) | 2020.11.30 |
---|---|
작업 표시 줄 작업을 동적으로 변경하려면 어떻게해야합니까? (0) | 2020.11.30 |
git push rejected : 오류 : 일부 참조를 푸시하지 못했습니다. (0) | 2020.11.30 |
VS2017 NetCoreApp을 EXE로 컴파일 (0) | 2020.11.30 |
데이터베이스 구성이 어댑터를 지정하지 않습니다. (0) | 2020.11.30 |