2011-07-18 5 views
0

나는 정규 표현식에서 아주 새로운 그리고 난 정규 표현식 here 다음 사용하여 날짜를 확인하기 위해 노력하고있어 :정규 표현식 날짜 유효성 검사 오류

^[1-31]\.[1-12]\.[1999-2005]$ 

하지만 "잘못된 reguar 표현"과 같은 출력을 받고 있어요

위의 정규 표현식에서 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?

답변

4

[1-31]과 같이 정규 표현식은 숫자의 범위와 일치 할 수 없습니다. 문자의 범위에만 일치 할 수 있습니다. [1-31]([12]?[0-9]|3[01])과 일치시켜야합니다. 대신 세계에서 가장 친숙한 것은 아닙니다.

2

당신은 사용할 수 있습니다

[0-9]{2}.[0-9]{2}.[0-9]{4} 

또는

^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).(19|20)[0-9]{2}$ 

모두 당신의 날짜와 일치하지만 늘 그 유효성을 검사합니다. 정규 표현식은 30-31 사이와 28 플러스 윤년을 확인해야한다는 사실 때문에 날짜를 확인하는 좋은 방법이라고 생각하지 않습니다.

아마도 윤년을 포함한 모든 조합을 처리하는 정규 표현식이있을 것입니다. 하지만 기존 환경의 기능을 사용하는 것이 좋습니다.

예를 들어 PHP를 사용하는 경우 checkdate() 또는 Ruby를 사용하는 날짜 클래스를 사용하십시오.

+0

+1, 하지만 당신은 그것을 적당한 형식으로 변환해야합니다, 그렇죠? – phimuemue

+0

checkdate - 그레고리력을 확인하십시오. || bool checkdate (int $ 달, int $ 일, int $ 년) || 지정된 날짜가 유효한 경우 TRUE를 반환합니다. 그렇지 않으면 FALSE를 리턴합니다. – Talisin

1

이 시도 :

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$ 

이 문자열 다음과 일치시킬 수 있습니다 ~

12.12.1999 
12-12-1999 
12 12 1999 
12/12/1999 
0

I ... 그것은 완벽하게 작동, 그렇게

`checkdate`에 대한
for(var i=0; i<100;i++){ 
    if(/^([1-9]|[1-2][0-9]|[3][0-1])$/.test(i)) { 
     console.log(i); 
    } 
} 
// display only the range of 1 to 31 and disregards the 32-100 
+0

실제 날짜 만 유효하다고 생각합니다. 질문을 보면 '25 년 4 월 25 일 '과 같은 것을 검증하려고하는 것 같습니다. 또한 루프는 의미가 없습니다. – amoebe

+0

루프가 데모 용입니다 ... ... – agutoli

+0

아, 미안 해요 (: – amoebe