JS/JavaScript

자바스크립트 공통 유틸 함수 모음

인생아 2024. 9. 12. 12:50
반응형

1. 숫자 3자리마다 콤마 찍기

 

function formatNumberWithCommas(number) {
  return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

console.log(formatNumberWithCommas(123456789));  // "123,456,789"

 

2. 카멜 케이스를 스네이크 케이스로 변환 (Camel to Snake)

function camelToSnake(str) {
  return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();
}

console.log(camelToSnake('helloWorldExample'));  // "hello_world_example"
 
 

3. 스네이크 케이스를 카멜 케이스로 변환 (Snake to Camel)

function snakeToCamel(str) {
  return str.replace(/(_\w)/g, matches => matches[1].toUpperCase());
}

console.log(snakeToCamel('hello_world_example'));  // "helloWorldExample"

 

4. 이메일 주소 유효성 체크

function isValidEmail(email) {
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return emailRegex.test(email);
}

console.log(isValidEmail('test@example.com'));  // true
console.log(isValidEmail('testexample.com'));   // false

 

5. 깊은복사(Deep Copy)

function deepCopy(obj) {
  return JSON.parse(JSON.stringify(obj));
}

const original = { name: "Alice", age: 25, address: { city: "Seoul" } };
const copied = deepCopy(original);
copied.address.city = "Busan";
console.log(original.address.city);  // "Seoul"

 

6. 핸드폰번호 체크

function isValidPhoneNumber(phoneNumber) {
  // 010으로 시작하고, 하이픈(-)을 포함한 13자리 숫자인지 검사
  const regex = /^010-?[0-9]{4}-?[0-9]{4}$/;
  return regex.test(phoneNumber);
}

const phoneNumber1 = "010-1234-5678";
const phoneNumber2 = "01012345678"; // 하이픈 없음
const phoneNumber3 = "0101234567";

console.log(isValidPhoneNumber(phoneNumber1)); // true
console.log(isValidPhoneNumber(phoneNumber2)); // true
console.log(isValidPhoneNumber(phoneNumber3)); // false

 

7. 빈 값 체크

// undefined, null, 0, '', false, 요소가 없는 배열이나 객체를 의미
function isEmpty(value) {
  return (
    value === undefined ||
    value === null ||
    (typeof value === 'object' && Object.keys(value).length === 0) ||
    (typeof value === 'string' && value.trim() === '') ||
    value === 0
  );
}

const myVariable1 = null;
const myVariable2 = "";
const myVariable3 = 0;
const myVariable4 = {};
const myVariable5 = [];

console.log(isEmpty(myVariable1)); // true
console.log(isEmpty(myVariable2)); // true
console.log(isEmpty(myVariable3)); // true
console.log(isEmpty(myVariable4)); // true
console.log(isEmpty(myVariable5)); // true

const myVariable6 = "  "; // 공백만 있는 문자열
console.log(isEmpty(myVariable6)); // true

const myVariable7 = [1, 2, 3];
console.log(isEmpty(myVariable7)); // false

 

8. 데이터 타입 확인

function getType(value) {
  return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
}

console.log(getType(42)); // "number"
console.log(getType("hello")); // "string"
console.log(getType(true)); // "boolean"
console.log(getType(null)); // "null"
console.log(getType(undefined)); // "undefined"
console.log(getType([1, 2, 3])); // "array"
console.log(getType({ name: "홍길동" })); // "object"
console.log(getType(new Date())); // "date"

 

9. 다양한 날짜 포맷 변환 함수

function formatDate(date, format = 'YYYY-MM-DD') {
  const map = {
    YYYY: date.getFullYear(),
    MM: ('0' + (date.getMonth() + 1)).slice(-2),
    DD: ('0' + date.getDate()).slice(-2),
    hh: ('0' + date.getHours()).slice(-2),
    mm: ('0' + date.getMinutes()).slice(-2),
    ss: ('0' + date.getSeconds()).slice(-2),
  };
  return format.replace(/YYYY|MM|DD|hh|mm|ss/g, matched => map[matched]);
}

// 예시:
const today = new Date();
console.log(formatDate(today, 'YYYY년 MM월 DD일 hh시 mm분 ss초')); // 2023년 11월 30일 15시 32분 05초

 

10. 날짜 계산 함수

function addDays(date, days) {
  const newDate = new Date(date);
  newDate.setDate(newDate.getDate() + days);
  return newDate;
}

function getDaysDiff(startDate, endDate) {
  const diffInMs = endDate - startDate;
  return Math.ceil(diffInMs / (1000 * 60 * 60 * 24));
}

// 예시:
const today = new Date();
const tomorrow = addDays(today, 1);
console.log(tomorrow); // 내일 날짜

const daysDiff = getDaysDiff(new Date('2023-11-01'), new Date('2023-11-30'));
console.log(daysDiff); // 30
반응형