2009-02-06 4 views
9

양식의 입력을 확인해야합니다. 입력이 1에서 19 자리 사이의 숫자가 될 것으로 기대하고 있습니다. 입력은 또한 0으로 시작할 수 있습니다. 그러나, 나는 그것이 모두 0은 아님을 확인하고 싶다. 나는 입력이 숫자이고 1과 19 사이의 숫자임을 보장하는 정규식을 가졌다.모두 0이 될 수없는 가변 길이 문자열과 일치하는 정규식이 필요합니다.

^\d[1,19]$ 

하지만 전체 문자열이 모두 0이 아닌지 확인하는 방법을 알아낼 수는 없습니다. 나는이

^(![0]{1,19})(\d[1,19])$ 

을 시도했지만이 제로의 변수 번호를 수 있기 때문에 그것은 0000000000000000001에 실패합니다.

전체 문자열이 0이 아닌지 어떻게 확인합니까?

감사합니다.

ASP.NET RegularExpressionValidator에서이 작업을 수행하려고하므로 단일식이 필요합니다. 나는 다른 선택권이 있기 때문에, 행할 수 없다면 나는 운이 없다.

(?!^0+$)(^\d{1,19}) 

이 펄에서 잘 작동합니다

답변

18

^(?!0+$)\d{1,19}$

+0

이전에 시도했지만 내가 준 예제에서는 작동하지 않습니다. 무엇을 확신하지 못했습니까? 그래도. – Notorious2tall

+0

두 번째 버전은 내 테스트 케이스에서 작동합니다. – chaos

+0

니스, 그거야! 당신은 (?! 0 + $) 부분을 설명 할 수 있습니까? – Notorious2tall

2

은 그냥 부정적 예측을한다.

+0

^를 "배제하고"처음부터 넣어 주면 길은 효과가 있지만이 방법은 의도를 더 분명하게 표현합니다. 끝까지 $를 써서 숫자 뒤의 어떤 것도 맞출 수는 없다. –

0

해당

  ulong test; 
     string number = "123456789"; 
     if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0)) 
      Console.WriteLine(test); 
+1

그는 일반적인 경우처럼 논리를 만드는 법을 알고있을 것이다. 그가하려고하는 것은 그것을 RE로 패키징하는 것이다. 그 이유가 있다고 가정 해보십시오. – chaos

+0

예, 맞습니다.서버 측에서 유효성을 검사 할 수 있지만 RegExValidator를 사용하여이 작업을 수행하려고했습니다. 부분적으로 b/c 나는 포스트를 만들고 싶지 않고 부분적으로 b/c 정규식을 배우고 싶다. 기본적으로 실용적이고 이기적인 이유. :) – Notorious2tall

+0

저는 여러분의 플랫폼에 익숙하지 않지만 RegExValidator의 디자이너가 정말 똑똑하다면 서버 측에서 실행하고 클라이언트 측 스크립트로 렌더링 할 수 있도록 만들었을 것입니다. 매우 최적화되어 있습니다 (클라이언트 측에서도 필요하지만 클라이언트를 절대 신뢰하지 마십시오). – chaos

2

(?! 0 + $)에 대한 정규식을 필요로하지 않는 내다 지시어이다. ?! 문자열의 끝까지 1 개 이상의 0을 검색하는 제외 lookahead 명령입니다. 일치하면 문자가 소비되고 \ d {1,19}의 일반 숫자 검색이 남습니다.

Boost Perl Regexp에는 Boost가 인정한 perl 정규 표현식에 대한 좋은 설명이 있습니다.