데이트 시간(2008-09-01 12:35:45)의 정규식 패턴은 무엇입니까?
날짜 시간(2008-09-01 12:35:45)에 대한 ReGEx 패턴은 무엇입니까?
다음 오류가 발생했습니다.
종료 구분 기호 '^'을(를) 찾을 수 없습니다.
사용:
preg_match('(?n:^(?=\d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(?(.0?2)(?=.{3,4}(1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00))|0?[1-9]|1\d|2[0-8])(?<sep>[/.-])(?<month>0?[1-9]|1[012])\2(?<year>(1[6-9]|[2-9]\d)\d{2})(?:(?=\x20\d)\x20|$))?(?<time>((0?[1-9]|1[012])(:[0-5]\d){0,2}(?i:\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$)', '2008-09-01 12:35:45');
다음 오류가 발생합니다.
경고: preg_match() [function.preg-match]:컴파일 실패: 19행의 E:\www\index.php에서 오프셋 0에서 반복할 항목 없음
@에스포: 정규식은 정말 놀랍습니다.사용자가 실제로 입력한 날짜와 시간을 확인하려는 경우와 같이 일치하는 데 유용한 코드를 작성해야 합니다.
Tom의 솔루션은 약 10억 배 더 단순하고 일부 괄호를 추가하면 사용자가 입력한 값을 쉽게 얻을 수 있기 때문에 더욱 유용할 것으로 보입니다.
(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})
펄을 사용하는 경우 다음과 같은 방법으로 값을 얻을 수 있습니다.
$year = $1;
$month = $2;
$day = $3;
$hour = $4;
$minute = $5;
$second = $6;
다른 언어들도 비슷한 기능을 갖게 될 것입니다.한 자리 수 월과 같은 값을 사용하려면 정규식을 약간 수정해야 합니다.
언급된 형식에 적합한 간단한 버전이지만 @Espos에 따라 다른 모든 버전은 그렇지 않습니다.
(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})
http://regexlib.com/REDetails.aspx?regexp_id=610
^(?=\d)(?:(?:31(!)(?:0?[2469]|11)|(?:30|29)(!0?2)|29(?)=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:068]|[2468]|13579][26)|?(16:00)|269)|(?:\x20|$)|(?:2[0-8]|1\d|0?[1-9]))([-./])(?:1[012]|0?[1-9])\1(?:1[6-9]|[2-9]\d)?\d\d(?:(?=\x20\d)\x20|$)?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\x20[AP]M))|(01]\d|2[0-3])(:[0-5]\d){1,2}$?
이 RE는 날짜 및/또는 시간 패턴을 모두 확인합니다.2월의 날들은 윤년에도 유효합니다.날짜: 1/1/1600 - 31/12/9999 사이의 dd/mm/yyy 또는 d/m/yy 형식입니다.선행 0은 선택 사항입니다.날짜 구분 기호는 일치하는 대시(-), 슬래시(/) 또는 마침표(.)일 수 있습니다.시간: 시간: hh:MM:ss AM/PM 12시간 형식(12:00 AM - 11:59:59 PM) 또는 hh:MM:ss 밀리터리 시간 형식(00:00:00 - 23:59:59).12시간 형식: 1) 시간에는 0이 선행될 수 있습니다. 2) 분과 초는 12시간 형식에 대한 선택 사항입니다. 3) AM 또는 PM이 필요하며 대소문자를 구분합니다.군 시간 1) 10시간 미만의 모든 시간에 대해 선행 0을 가져야 합니다. 2) 분은 필수 항목입니다.초는 선택 사항입니다.날짜: 위 형식의 조합입니다.처음 날짜 다음에 공백으로 구분된 시간입니다.ex) dd/mm/yyyhh:MM:ss
편집: StackOverflow는 때때로 특수 문자를 제거/해제하므로 regexlib.com 웹 사이트에서 ReGEx를 복사해야 합니다.
$date = "2014-04-01 12:00:00";
preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/',$date, $matches);
print_r($matches);
$165는 다음과 같습니다.
Array (
[0] => 2014-04-01 12:00:00
[1] => 2014
[2] => 04
[3] => 01
[4] => 12
[5] => 00
[6] => 00
)
날짜 형식의 문자열을 쉽게 분할할 수 있는 방법입니다.
^([2][0]\d{2}\/([0]\d|[1][0-2])\/([0-2]\d|[3][0-1]))$|^([2][0]\d{2}\/([0]\d|[1][0-2])\/([0-2]\d|[3][0-1])\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d)$
2008년 9월 1일 12시 33분의 임란 답변과 관련하여 누락된 것이 있습니다: 패턴에서 올바른 패턴은
preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', '2008-09-01 12:35:45', $m1);
print_r( $m1 );
preg_match('/\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}:\d{2}/', '2008-09-01 12:35:45', $m2);
print_r( $m2 );
preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', '2008-09-01 12:35:45', $m3);
print_r( $m3 );
이것이 반환됩니다.
Array ( [0] => 2008-09-01 12:35:45 )
Array ( [0] => 2008-09-01 12:35:45 )
Array ( [0] => 2008-09-01 12:35:45 )
@Greg Hewgill의 답변에 추가: 날짜-시간과 날짜만 일치시키려면 정규식의 "시간" 부분을 선택적으로 만들 수 있습니다.
(\d{4})-(\d{2})-(\d{2})( (\d{2}):(\d{2}):(\d{2}))?
이렇게 하면 둘 다 일치할 것입니다.2008-09-01 12:35:42
그리고.2008-09-01
검증을 통한 단순 정규식 날짜 지정 시간
^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$
그러나 31일을 포함하지 않는 유효성 확인 월은 될 수 없습니다(예: 2022-11-31, 2022-02-30).
제 솔루션은 다음과 같습니다.
/^(2[0-9]{3})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0123])\:([012345][0-9])\:([012345][0-9])$/u
http://regexlib.com/REDetails.aspx?regexp_id=610 에서 regex 패턴을 수정하였습니다.다음 패턴은 사용자의 경우와 일치해야 합니다.
^(?=\d)(?:(?:1[6-9]|[2-9]\d)?\d\d([-.\/])(?:1[012]|0?[1-9])\1(?:31(?<!.(?:0[2469]|11))|(?:30|29)(?<!.02)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\x20|$))|(?:2[0-8]|1\d|0?[1-9]))(?:(?=\x20\d)\x20|$))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\x20[AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$
YYY-MM-DD HH:MM:SS
이것이 내 해결책입니다.
[1-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])
PHP preg 함수는 정규식을 구분 문자로 묶어야 하며, 이 문자는 임의의 문자일 수 있습니다.정규식 내부를 이스케이프하지 않고는 이 구분 기호 문자를 사용할 수 없습니다.이렇게 하면 됩니다(여기서 구분 기호 문자는 /입니다).
preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', '2008-09-01 12:35:45');
// or this, to allow matching 0:00:00 time too.
preg_match('/\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}:\d{2}/', '2008-09-01 12:35:45');
날짜 시간만 포함하는 행을 일치시켜야 하는 경우 정규식의 시작과 끝에 ^과 $를 추가합니다.
preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', '2008-09-01 12:35:45');
제 솔루션은 다음과 같습니다.
[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]) ([01][0-9]|2[0-3]):[0-5]\d
https://regex101.com/r/lbthaT/4
다음은 단순화된 버전입니다(Espo의 답변에서 유래됨).의 정확성을 :ss는 선택 사항인 "hh:mm:ss"입니다.
예: 작하는예:
- 31/12/2003 11:59:59
- 29-2-2004
^(?=\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\x20|$))|(?:2[0-8]|1\d|0?[1-9]))([-./])(?:1[012]|0?[1-9])\1(?:1[6-9]|[2-9]\d)?\d\d(?:(?=\x20\d)\x20|$))(|([01]\d|2[0-3])(:[0-5]\d){1,2})?$
언급URL : https://stackoverflow.com/questions/37732/what-is-the-regex-pattern-for-datetime-2008-09-01-123545
'programing' 카테고리의 다른 글
PowerShell의 'forach' 루프에서 해시 테이블 값 업데이트 (0) | 2023.07.30 |
---|---|
이 MySQL 오류가 발생하지 않도록 하려면 어떻게 해야 합니까? COLUMN NAME에 대한 잘못된 열 지정자? (0) | 2023.07.30 |
이 문제를 해결하기 위해 복잡한 선택 쿼리가 있습니까? (0) | 2023.07.30 |
두 줄의 텍스트 오버플로 줄임표 (0) | 2023.07.30 |
Oracle에 여러 행 삽입 (0) | 2023.07.30 |