문제

주어진 날짜 시간 형식 패턴에서 정규식을 동적으로 생성하는 기존 솔루션이 있습니까?지원되는 날짜 시간 형식 패턴은 중요하지 않습니다(Joda DateTimeFormat, java.text.SimpleDateTimeFormat 또는 기타).

즉.지정된 날짜-시간 형식(예: "dd/MM/yyyy hh:mm")에 대해 지정된 형식 내의 날짜-시간과 일치하는 해당 정규식을 생성합니다.

도움이 되었습니까?

해결책

시간 형식을 구성할 수 있는 알파벳이 제한된 것 같습니다.그 의미는, "HH" 24시간제 기준으로 항상 "시간"입니다. "dd" 항상 앞에 0이 붙는 식입니다.

시간 형식의 순차적 특성으로 인해 형식 문자열을 토큰화하려고 시도할 수 있습니다. "dd/mm/yyyy HH:nn" 배열로 ["dd", "/", "mm", "/", "yyyy", " ", "HH", ":", "nn"].그런 다음 교체하여 해당 배열에서 패턴 문자열을 형성하십시오. "HH" ~와 함께 "([01][0-9]|2[0-3])" 등등.이러한 패턴 원자를 조회 테이블/배열로 미리 구성합니다.조회 테이블에 없는 배열의 모든 부분은 리터럴입니다.정규식 규칙에 따라 이스케이프하고 패턴 문자열에 추가합니다.


편집하다:정규식 기반 솔루션의 부작용으로 조회 테이블의 모든 정규식 "원자"를 괄호에 넣고 주어진 형식 문자열에서 순서를 추적하면 하위 일치를 사용하여 필요한 구성 요소를 추출할 수 있습니다. 일치 항목에서 이를 CreateDate 함수에 공급하므로 ParseDate 부분을 완전히 건너뜁니다.

다른 팁

기본적인 날짜 확인을 찾고 있다면.이 코드는 이 데이터와 일치합니다.

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

10/07/2008  
10.07.2008
1-01/2008
10/07/08    
10.07.2008
1-01/08

regexbuddy를 통한 코드

SimpleDateFormat 이미 이 작업을 수행하고 있습니다. parse() 방법.

단일 문자열에서 여러 날짜를 구문 분석해야 하는 경우 정규식으로 시작하고(너무 관대하게 일치하더라도) 다음을 사용하십시오. parse() 정규식으로 찾은 모든 잠재적 일치 항목에 대해.

아래에 제공된 js/jQuery 코드는 날짜 시간이 아닌 날짜 형식에 대해서만 동적 생성 정규식을 생성합니다(개발 버전은 아직 완전히 테스트되지 않았습니다.)

날짜 형식은 " D M Y "여야 합니다.

예.
DD-MM-YY,
DD-MM-YYYY,
YYYY-MM-DD,
YYYY-DD-MM,
MM-DD-YYYY,
MM-DD-YY,
DD/MM/YY,
DD/MM/YYYY,
YYYY/MM/DD,
YYYY/DD/MM,
월/일/년,
월/일/연도
또는 다른 형식이지만 [DM Y] 문자로 생성됨

var dateFormat = "DD-MM-YYYY";
var order = [];
    var position = {"D":dateFormat.search('D'),"M":dateFormat.search('M'),"Y":dateFormat.search('Y')};
    var count = {"D":dateFormat.split("D").length - 1,"M":dateFormat.split("M").length - 1,"Y":dateFormat.split("Y").length - 1};
    var seprator ='';
    for(var i=0; i<dateFormat.length; i++){
  if(["Y","M","D"].indexOf(dateFormat.charAt(i))<0){
    seprator = dateFormat.charAt(i);
  }else{
    if(order.indexOf(dateFormat.charAt(i)) <0 ){
        order.push(dateFormat.charAt(i));
    }
  }
    }
    var regEx  = "^";
    $(order).each(function(ok,ov){
    regEx  += '(\d{'+count[ov]+'})'+seprator;
    });
    regEx = regEx.substr(0,(regEx.length)-1);
  regEx  +="$";
  var re = new RegExp(regEx);
  console.log(re);

참고- 몇 달 / 일 예를 들어 검증 점검이 없습니다.월은 01-12여야 하고 날짜는 01-31이어야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top