developer tip

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

optionbox 2020. 10. 20. 07:33
반응형

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


값이 주어지면 유효한 연도인지 확인하기 위해 유효성을 검사하고 싶습니다. 내 기준은 값이 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)

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


연도와 함께 다른 단어를 포함하는 문자열에서 연도를 테스트하려면 다음 정규식을 사용할 수 있습니다. \ b \ d {4} \ b


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

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

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

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


사용하다;

^(19|[2-9][0-9])\d{2}$ 

1900 년-9999 년 동안.

9999 이상은 걱정할 필요가 없습니다. AI는 그때까지 모든 프로그래밍을 할 것입니다 !!! 헤헤 헤헤

https://regex101.com/ 에서 정규식을 테스트 할 수 있습니다.

비 캡처 그룹 (위의 설명 중 하나에 언급 됨)에 대한 자세한 정보는 여기 http://www.manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm


정수를 문자열로 변환 할 수 있습니다. 빼기 기호는 숫자와 일치하지 않으므로 음수 연도는 없습니다.


이 정규식을 Java에서 사용합니다. ^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$

1900에서 9999까지 작동


/ ^ \ d {4} $ / 문자열이 4 개의 숫자로만 구성되어 있는지 확인합니다. 이 시나리오에서 989 년을 입력하려면 대신 0989를 입력 할 수 있습니다.


YYYY 또는 YYYYMMDD와 일치해야하는 경우 다음을 사용할 수 있습니다.

^((?:(?:(?:(?:(?:[1-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:[2468][048]|[13579][26])00))(?:0?2(?:29)))|(?:(?:[1-9]\d{3})(?:(?:(?:0?[13578]|1[02])(?:31))|(?:(?:0?[13-9]|1[0-2])(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8])))))|(?:19|20)\d{2})$

이것을 사용할 수도 있습니다.

([0-2][0-9]|3[0-1])\/([0-1][0-2])\/(19[789]\d|20[01]\d)

참고URL : https://stackoverflow.com/questions/4374185/regular-expression-match-to-test-for-a-valid-year

반응형