마음의 안정을 찾기 위하여 - [JavaScript] Javascript Masking Function
2755824
894
1170
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
[JavaScript] Javascript Masking Function
Web, Script/JavaScript | 2025/09/17 10:56



 // 기본 전화번호 마스킹 함수
function maskPhoneNumber(phone, type = 'middle') {
    // 숫자만 추출
    const numbers = phone.replace(/\D/g, '');
    
    // 국가번호 처리
    let cleanNumber = numbers;
    if (numbers.startsWith('82')) {
        cleanNumber = '0' + numbers.substring(2);
    }
    
    // 전화번호 유형 판별 및 마스킹
    if (cleanNumber.startsWith('010') || cleanNumber.startsWith('011') || 
        cleanNumber.startsWith('016') || cleanNumber.startsWith('017') || 
        cleanNumber.startsWith('018') || cleanNumber.startsWith('019')) {
        return maskMobilePhone(cleanNumber, type);
    } else if (cleanNumber.startsWith('02')) {
        return maskSeoulPhone(cleanNumber, type);
    } else if (cleanNumber.length === 10 || cleanNumber.length === 11) {
        return maskLocalPhone(cleanNumber, type);
    }
    
    return '올바르지 않은 전화번호 형식';
}

// 휴대폰 번호 마스킹
function maskMobilePhone(phone, type) {
    const part1 = phone.substring(0, 3);  // 010
    const part2 = phone.substring(3, 7);  // 1234
    const part3 = phone.substring(7);     // 5678
    
    switch(type) {
        case 'middle':
            return `${part1}-****-${part3}`;
        case 'partial':
            return `${part1}-${part2.substring(0,2)}**-${part3.substring(0,2)}**`;
        case 'end':
            return `${part1}-${part2}-****`;
        case 'heavy':
            return `${part1.substring(0,2)}*-****-****`;
        default:
            return `${part1}-****-${part3}`;
    }
}

// 서울 지역번호 마스킹
function maskSeoulPhone(phone, type) {
    if (phone.length === 9) {
        const part1 = '02';
        const part2 = phone.substring(2, 5);
        const part3 = phone.substring(5);
        
        switch(type) {
            case 'middle':
                return `${part1}-***-${part3}`;
            case 'partial':
                return `${part1}-${part2.substring(0,1)}**-${part3.substring(0,2)}**`;
            case 'end':
                return `${part1}-${part2}-****`;
            case 'heavy':
                return `02-****-****`;
            default:
                return `${part1}-***-${part3}`;
        }
    } else if (phone.length === 10) {
        const part1 = '02';
        const part2 = phone.substring(2, 6);
        const part3 = phone.substring(6);
        
        switch(type) {
            case 'middle':
                return `${part1}-****-${part3}`;
            case 'partial':
                return `${part1}-${part2.substring(0,2)}**-${part3.substring(0,2)}**`;
            case 'end':
                return `${part1}-${part2}-****`;
            case 'heavy':
                return `02-****-****`;
            default:
                return `${part1}-****-${part3}`;
        }
    }
    return '올바르지 않은 서울 지역번호';
}

// 지역번호 마스킹
function maskLocalPhone(phone, type) {
    if (phone.length === 10) {
        const part1 = phone.substring(0, 3);
        const part2 = phone.substring(3, 6);
        const part3 = phone.substring(6);
        
        switch(type) {
            case 'middle':
                return `${part1}-***-${part3}`;
            case 'partial':
                return `${part1}-${part2.substring(0,1)}**-${part3.substring(0,2)}**`;
            case 'end':
                return `${part1}-${part2}-****`;
            case 'heavy':
                return `${part1}-****-****`;
            default:
                return `${part1}-***-${part3}`;
        }
    } else if (phone.length === 11) {
        const part1 = phone.substring(0, 3);
        const part2 = phone.substring(3, 7);
        const part3 = phone.substring(7);
        
        switch(type) {
            case 'middle':
                return `${part1}-****-${part3}`;
            case 'partial':
                return `${part1}-${part2.substring(0,2)}**-${part3.substring(0,2)}**`;
            case 'end':
                return `${part1}-${part2}-****`;
            case 'heavy':
                return `${part1}-****-****`;
            default:
                return `${part1}-****-${part3}`;
        }
    }
    return '올바르지 않은 지역번호';
}

// 배열의 전화번호들을 일괄 마스킹
function maskPhoneArray(phoneArray, type = 'middle') {
    return phoneArray.map(phone => maskPhoneNumber(phone, type));
}

// 텍스트에서 전화번호를 찾아서 마스킹
function maskPhoneInText(text, type = 'middle') {
    const phoneRegex = /(\+?82-?)?0\d{1,2}-?\d{3,4}-?\d{4}/g;
    return text.replace(phoneRegex, (match) => maskPhoneNumber(match, type));
}
2025/09/17 10:56 2025/09/17 10:56
Article tag list Go to top
View Comment 0
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
 
 
 
 
: [1][2][3][4][5][6][7][8][9] ... [1337] :
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
전체 (1337)
AI 프... (0)
출판 준비 (0)
My-Pro... (41)
사는 ... (936)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (96)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (6)
Database (12)
리눅스 (29)
Windows (30)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (27)
잡다한... (7)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)