값이 주어지면 유효한 연도인지 확인하기 위해 유효성을 검사하고 싶습니다. 내 기준은 값이 4
문자 가있는 정수 여야하는 경우 간단 합니다. 나는 몇 년 전에 허용하지 않으므로이 최선의 해결책 아니라는 것을 알고 1000
등과 같은 년 같은 수 있습니다 5000
. 이 기준은 현재 시나리오에 적합합니다.
내가 생각 해낸 것은
\d{4}$
이것이 작동하는 동안 음수 값도 허용됩니다.
양의 정수만 허용되도록하려면 어떻게해야합니까?
값이 주어지면 유효한 연도인지 확인하기 위해 유효성을 검사하고 싶습니다. 내 기준은 값이 4
문자 가있는 정수 여야하는 경우 간단 합니다. 나는 몇 년 전에 허용하지 않으므로이 최선의 해결책 아니라는 것을 알고 1000
등과 같은 년 같은 수 있습니다 5000
. 이 기준은 현재 시나리오에 적합합니다.
내가 생각 해낸 것은
\d{4}$
이것이 작동하는 동안 음수 값도 허용됩니다.
양의 정수만 허용되도록하려면 어떻게해야합니까?
답변:
시작 앵커 ^
를 다음과 같이 추가해야합니다 .
^\d{4}$
정규식 \d{4}$
은 4 자리 숫자로 끝나는 문자열과 일치 합니다. 따라서 다음과 같은 입력 -1234
이 허용됩니다.
시작 앵커를 추가하면 4 자리 숫자로 시작하고 끝나는 문자열 만 일치합니다. 즉, 4 자리 숫자 만 포함되어야합니다.
whateverblahblah2323
것이다. 약간의 학습이 위험한 이유는 지금은 이해 : O
10000
는 것은 버그가 될 것입니다.
1000 년에서 2999 년까지
^[12][0-9]{3}$
1900-2099 년
^(19|20)\d{2}$
^(?:19|20)\d{2}$
(19|20)\d{2}
생년월일 형식의 유효성을 검사하기 위해 정규식에 추가 하려면 어떻게 해야합니까? 이것은 내 정규식 /^[0-9]{1,2}\/(0[1-9])|(1[0-2])\/[0-9]{4}$/
입니다. 연도가 항상 4 자리이고 19 ** 또는 20 **로 시작하도록하고 싶습니다.
이 질문에 대한 "허용 된"답변은 틀렸고 근시입니다.
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)
197999
19[789]\d\d\d
수있는 것197999
/(19[789]\d|20[01]\d)/.test(1970324) >> true
1970
마지막 3 개가 아니라 처음 4 개 숫자 ( ) 와 일치합니다 (19[789]\d|20[01]\d)[^0-9]
. 즉 일치합니다 1970 324
하지만1970324
연도와 함께 다른 단어를 포함하는 문자열에서 연도를 테스트하려면 다음 정규식을 사용할 수 있습니다. \ b \ d {4} \ b
사용하다;
^(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
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)
00/00/2000
또는 31/02/1999
더 많은 잘못된 날짜.
(0[1-9]|1[0-2])
달에 대한 더 나은 표현이다