[regex] 유효한 연도를 테스트하기위한 정규식 일치

값이 주어지면 유효한 연도인지 확인하기 위해 유효성을 검사하고 싶습니다. 내 기준은 값이 4문자 가있는 정수 여야하는 경우 간단 합니다. 나는 몇 년 전에 허용하지 않으므로이 최선의 해결책 아니라는 것을 알고 1000등과 같은 년 같은 수 있습니다 5000. 이 기준은 현재 시나리오에 적합합니다.

내가 생각 해낸 것은

\d{4}$

이것이 작동하는 동안 음수 값도 허용됩니다.

양의 정수만 허용되도록하려면 어떻게해야합니까?



답변

시작 앵커 ^를 다음과 같이 추가해야합니다 .

^\d{4}$

정규식 \d{4}$4 자리 숫자로 끝나는 문자열과 일치 합니다. 따라서 다음과 같은 입력 -1234이 허용됩니다.

시작 앵커를 추가하면 4 자리 숫자로 시작하고 끝나는 문자열 만 일치합니다. 즉, 4 자리 숫자 만 포함되어야합니다.


답변

1000 년에서 2999 년까지

^[12][0-9]{3}$

1900-2099 년

^(19|20)\d{2}$


답변

이 질문에 대한 “허용 된”답변은 틀렸고 근시입니다.

0001유효한 연도가 아닌와 같은 문자열과 일치한다는 점에서 올바르지 않습니다 .

9999 이상의 값과 일치하지 않는다는 점에서 근시 적입니다 . 우리는 이미 Y2K 의 교훈을 잊었 습니까? 대신 정규식을 사용하십시오.

^[1-9]\d{3,}$

미래 연도 외에도 과거 연도를 일치시켜야하는 경우 다음 정규식을 사용하여 양의 정수를 일치시킬 수 있습니다.

^[1-9]\d*$

과거의 날짜를 예상하지 않더라도 누군가가 타임머신을 발명하고 소프트웨어를 가져 가고자하는 경우를 대비하여 어쨌든이 정규식을 사용하는 것이 좋습니다.

참고 :이 정규식은 일반적으로 음의 정수 대신 BC 지정으로 표현되기 때문에 1 년 이전의 연도를 포함하여 모든 연도와 일치합니다. 물론이 규칙은 앞으로 몇 천년에 걸쳐 변경 될 수 있으므로 가장 좋은 방법은 다음 정규식을 사용하여 양수 또는 음수 정수를 일치시키는 것입니다.

^-?[1-9]\d*$


답변

이것은 1900 년에서 2099 년까지 작동합니다.

/(?:(?:19|20)[0-9]{2})/


답변

1970-2019 년 동안 @ r92 답변을 기반으로 구축 :

(19[789]\d|20[01]\d)


답변

이론적으로 4 자리 옵션이 옳습니다. 그러나 실제로는 1900-2099 범위를 갖는 것이 더 나을 수 있습니다.

또한 비 캡처 그룹이어야합니다. 많은 의견과 답변이 적절한 IMHO가 아닌 캡처 그룹화를 제안합니다. 일치를 위해 작동 할 수 있지만 정규식을 사용하여 일치를 추출하는 경우에도 paranthesis 때문에 4 자리 숫자와 2 자리 숫자 (19 및 20)를 추출합니다.

이것은 캡처되지 않는 그룹을 사용하는 정확한 일치에 대해 작동합니다.

(?:19|20)\d{2}


답변

[ ^-]\d{4}$: 마이너스 기호 -가 4 자리 앞에 오는 것을 방지합니다 . with 를
사용 하여 문자열의 시작 부분을 잡을 수도 있습니다 . 실제로 시나리오에 따라 다릅니다.^\d{4}$^