programing tip

0보다 큰 숫자에 대한 정규식?

itbloger 2020. 11. 30. 07:55
반응형

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]*)$

예 : http://regexr.com/3anf5

참조 : https://social.msdn.microsoft.com/Forums/en-US/17089c0f-f9cb-437a-9667-ba8329681624/regular-expression-number-greater-than-0?forum=regexp


가장 좋은 해결책은 정규 표현식의 두 괄호 사이에 + 기호를 추가하는 것입니다.

^[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})?$

참조 : 소수점 2 자리가있는 0보다 큰 정규식


아래 표현식을 사용할 수 있습니다.

(^\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

반응형