221013 TIL -정규표현식,date

김민승·2022년 10월 13일
0

TIL

목록 보기
22/24
post-thumbnail

정규표현식

정규식 메서드 참고 블로그
정규식은 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용된다.

대표적으로 입력칸에 전화번호나 이메일을 입력하라고 했을때, 옳지 않은 값을 입력하면 정규표현식에 의해 필터링되어 걸러져 경고창을 띄운다.

이처럼 반복문과 조건문을 사용해야 할것같은 복잡한 코드도 정규표현식을 이용하면 매우 간단하게 표현할 수 있으며 주로 다음과 같은 상황에서 굉장히 유용하게 사용된다.

  • 각각 다른 포맷으로 저장된 엄청나게 많은 전화번호 데이터를 추출해야 할 때
  • 사용자가 입력한 이메일, 휴대폰 번호, IP 주소 등이 올바른지 검증하고 싶을 때
  • 코드에서 특정 변수의 이름을 치환하고 싶지만, 해당 변수의 이름을 포함하고 있는 함수는 제외하고 싶을 때
  • 특정 조건과 위치에 따라서 문자열에 포함된 공백이나 특수문자를 제거하고 싶을 때

< 아래 내용은 공부의 효율을 위해 그저 교안을 따라 친 것이다>

("paullab CEO leehojun hello CEO").replace(/CEO/, "CTO")
("paullab CEO leehojun hello CEO").replace(/CEO/g, "CTO")

("paullab CEO leehojun hello CEO").match(/CEO/g)

("paullab CEO leehojun hello CEO").split(/CEO/g)
/
'!!!'.split('!')
(4) ['', '', '', '']
'a!a!a!a'.split('!')
(4) ['a', 'a', 'a', 'a']
'a!a!a!'.split('!')
(4) ['a', 'a', 'a', '']
'!a!a!'.split('!')
(4) ['', 'a', 'a', '']
/

(/CEO/g).test("paullab CEO leehojun hello CEO")

// 3. 일반문자열
/hello/g

// 4. 처음과 끝
/^hello/g
/hello/g/hello/g /^hello/g

// 5. 모든문자 매핑
/hello/g
/h.llo/g
/hello..world/g

// 6. 모든문자 매핑
/h[eao]llo/g

// 7. 범위
/h[a-zA-Z0-9]llo/g

// 8. 부정
/h[^ae]llo/g

// 9. 그루핑 규칙
/(on|ues|rida)/gm //: 그룹 1로 3개 중 매칭되는 패턴 찾음
// /(?:on|ues)/gm
// /(on|ues)|(rida)/gm : 그룹1(on|ues)과 그룹2(rida)로 각각 매칭되는 패턴 찾음
/.(a|e|o)ll./gm
// /hello (?!world)/gm : hello 뒤에 world가 오지 않는 것 (네거티브 매칭)
// /hello (?=world)/gm : hello 뒤에 world가 오는 것 (파지티브 매칭)

("hello hallo hello").match(/.(a|e|o)ll./g)
("hello hallo hello hello hi").match(/.(a|e|o)ll./g)
("hello hallo hello hello hi").match(/.[eao]ll./g)

// 10. 수량자
/
_
: 앞에 있는 문자가 0개 ~ N개
+ : 앞에 있는 문자가 1개 ~ N개
? : 앞에 있는 문자가 0개 ~ 1개

{3} : 3개
{3,} : 3개 이상
{1,3} : 1개 ~ 3개

* : 앞에 있는 문자가 0개 ~ N개 ({0,})
+ : 앞에 있는 문자가 1개 ~ N개({1,})
_? : 앞에 있는 문자가 0개 ~ 1개 ({0,1})

/[0-9]{3}[-.* ][0-9]{4}[-.* ][0-9]{4}/gm
/[0-9]{2,3}[-.* ]?[0-9]{3,5}[-.* ]?[0-9]{4}/gm
/[0-9a-zA-Z]+@[0-9a-zA-Z]+.[a-zA-Z]+/gm
*/

Date

  • Date()
    현재 시각, 날짜 나타내주는 함수.
Date()
// Thu Oct 13 2022 23:30:23 GMT+0900 (한국 표준시)'

let d = new Date()
// 특정 이벤트가 발생하는 시점

d.getDate() // 1부터 시작합니다.
//13
d.getMonth() // 0월부터 시작합니다. +1 해야 합니다!
//9
d.getDay() // 0부터 시작합니다. 0은 일요일입니다.
//4

d.getHours()
d.getMinutes()
d.getSeconds()

// 위 함수들은 내가 d 를 선언한 시점의 시간대를 알려줌.
switch (d.getDay()) {
    case 0:
        console.log('일요일')
        break;
    case 1:
        console.log('월요일')
        break;
    case 2:
        console.log('화요일')
        break;
    case 3:
        console.log('수요일')
        break;
    case 4:
        console.log('목요일')
        break;
    case 5:
        console.log('금요일')
        break;
    case 6:
        console.log('토요일')
        break;
    default:
        console.log('날짜의 양식이 잘못되었습니다.')
        break;
}

=> switch문으로 오늘 무슨 요일인지 알려주기

// 2023년 1월! 우리의 수료시점!
new Date(2023, 0)

// 2023년 1월 21일!
new Date(2023, 0, 21)

// 2023년 1월 21일 10시!
new Date(2023, 0, 21, 10)

// 다음처럼 표현하면 가독성이 훨씬 좋다. 여기에서 문제가 발생! 왜 1이(2월) 아닌가??
new Date('2023/1/20/10:00:00')
today = new Date('2023/1/20/10:00:00')
today.toString();
// // -> Fri Jul 24 2020 12:30:00 GMT+0900 (대한민국 표준시)
today.toISOString();
//'2022-10-13T14:39:21.688Z'
today.toISOString().slice(0, 10); //2022-10-13
today.toISOString().slice(0, 10).replace(/-/g, '') //20221013


//국가별 시간 표시
today.toLocaleString('ko-KR'); // -> 2020. 7. 24. 오후 12:30:00
today.toLocaleString('en-US'); // -> 7/24/2020, 12:30:00 PM
today.toLocaleString('ja-JP'); // -> 2020/7/24 12:30:00

월 인덱스 0과 1이 헷갈렸다.
어떤 목적으로 나눠놓은건지 정리가 안돼서 풍윤님이 올려주신 댓글로 공부 했다!

월이 0으로 적용되는 부분은
기본적인 Date()문법과 JavaScript Get , Set Date Methods를 사용할때

1. new Date(year, month, day, hours, minutes, seconds, milliseconds)

const d = new Date(2018, 11, 24, 10, 33, 30, 0);  // 이건 12월입니다

2. getMonth()

 const d = new Date("2001-03-25"); 이건 ISO Dates로 3월입니다
d.getMonth();    // 결과는 2 이지만 3월이라는거 명심

3. setMonth()

const d = new Date();
d.setMonth(11);      // 12월을 뜻합니다

포맷을 사용하는경우 다시 찾아볼 것(아래는 월도 1부터 시작)
1. ISO Dates
const d = new Date("2015-03-25T12:00:00-06:30"); //3월입니다

  1. JavaScript Short Dates
    const d = new Date("03/25/2015"); //3월입니다
const dayNames = [
  '(일요일)',
  '(월요일)',
  '(화요일)',
  '(수요일)',
  '(목요일)',
  '(금요일)',
  '(토요일)'
];

// getDay 메서드는 해당 요일(0 ~ 6)을 나타내는 정수를 반환한다.
const day = dayNames[today.getDay()];
const year = today.getFullYear();
const month = today.getMonth() + 1;
const date = today.getDate();
let hour = today.getHours();
let minute = today.getMinutes();
let second = today.getSeconds();
const ampm = hour >= 12 ? 'PM' : 'AM';
profile
꾸준함을 이길 방법은 없다

0개의 댓글