{"ScriptPreparationCode":"const emailRegex = /([a-zA-Z0-9._-]\u002B@[a-zA-Z0-9._-]\u002B\\.[a-zA-Z0-9_-]\u002B)/gi\r\nconst phoneRegex = /([0-9]{2,3})[-]?([0-9]{3,4})[-]?([0-9]{4})/gi\r\n// \uD55C\uAE00 2~5 \uC790\uC758 \uACBD\uC6B0\uB294 \uC774\uB984 \uBFD0\uB9CC \uC544\uB2C8\uB77C \uB2E4\uB978 \uACBD\uC6B0\uB3C4 \uC788\uC73C\uBBC0\uB85C g \uC635\uC158\uC744 \uC81C\uC678\r\nconst koreanNameRegex = /^[\uAC00-\uD7A3]{2,5}$/\r\n\r\nfunction isEmail(input) {\r\n return emailRegex.test(input)\r\n}\r\n\r\nfunction isPhoneNumber(input) {\r\n return phoneRegex.test(input)\r\n}\r\n\r\nfunction isKoreanName(input) {\r\n return koreanNameRegex.test(input)\r\n}\r\n\r\nfunction maskString(value) {\r\n const length = value.length\r\n if (length === 0) return value\r\n\r\n const mask = \u0027*\u0027.repeat(value.length - (length \u003C= 2 ? 1 : 2))\r\n /**\r\n * \uAE38\uC774\uAC00 2 \uC774\uD558\uC778 \uACBD\uC6B0 \uCCAB \uAE00\uC790\uB9CC \uB178\uCD9C\uB418\uB3C4\uB85D \uCC98\uB9AC\r\n * \uAE38\uC774\uAC00 3 \uC774\uC0C1\uC778 \uACBD\uC6B0 \uCC98\uC74C\uACFC \uB9C8\uC9C0\uB9C9 \uAE00\uC790\uB294 \uB178\uCD9C\uB418\uACE0 \uB098\uBA38\uC9C0\uB294 \uB9C8\uC2A4\uD0B9 \uCC98\uB9AC\r\n */\r\n return length \u003C= 2 ? value[0] \u002B mask : value[0] \u002B mask \u002B value[length - 1]\r\n}\r\n\r\nfunction maskEmail(value) {\r\n let result = value\r\n const matchString = value.match(emailRegex)\r\n matchString.forEach(email =\u003E {\r\n const [localPart, domainPart] = email.split(\u0027@\u0027)\r\n const maskedLocalPart = maskString(localPart)\r\n result = result.replace(email, \u0060${maskedLocalPart}@${domainPart}\u0060)\r\n })\r\n return result\r\n}\r\n\r\nfunction maskPhoneNumber(value) {\r\n return value.replace(phoneRegex, \u0027$1-****-$3\u0027)\r\n}\r\n","TestCases":[{"Name":"\uC7AC\uADC0 \uCC98\uB9AC","Code":"const data = [{\r\n\ta: {\r\n \tname: \u0022\uD64D\uAE38\uB3D9\u0022,\r\n b: {\r\n email: \u0022abc@gmail.com\u0022,\r\n c: {\r\n \tphone: \u002201012341234\u0022\r\n }\r\n },\r\n }\r\n}]\r\nconst data2 = {\r\n\ta: {\r\n \tname: \u0022\uD64D\uAE38\uB3D9\u0022,\r\n b: {\r\n email: \u0022abc@gmail.com\u0022,\r\n c: {\r\n \tphone: \u002201012341234\u0022\r\n }\r\n },\r\n }\r\n}\r\n\r\nfunction identifyAndMask(input) {\r\n if (isEmail(input)) {\r\n return maskEmail(input)\r\n } else if (isPhoneNumber(input)) {\r\n return maskPhoneNumber(input)\r\n } else if (isKoreanName(input)) {\r\n return maskString(input)\r\n }\r\n return input\r\n}\r\n\r\nfunction maskObjectStrings(obj) {\r\n if (typeof obj === \u0027object\u0027 \u0026\u0026 obj !== null) {\r\n if (Array.isArray(obj)) {\r\n // \uBC30\uC5F4\uC778 \uACBD\uC6B0 \uAC01 \uC694\uC18C\uB97C \uC7AC\uADC0\uC801\uC73C\uB85C \uCC98\uB9AC\r\n return obj.map(item =\u003E maskObjectStrings(item))\r\n } else {\r\n // \uAC1D\uCCB4\uC778 \uACBD\uC6B0 \uAC01 \uC18D\uC131 \uAC12\uC744 \uC7AC\uADC0\uC801\uC73C\uB85C \uCC98\uB9AC\r\n const maskedObj = {}\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n maskedObj[key] = maskObjectStrings(obj[key])\r\n }\r\n }\r\n return maskedObj\r\n }\r\n } else if (typeof obj === \u0027string\u0027) {\r\n // \uBB38\uC790\uC5F4\uC778 \uACBD\uC6B0 \uB9C8\uC2A4\uD0B9\r\n return identifyAndMask(obj)\r\n } else {\r\n // \uAC1D\uCCB4\uB098 \uBB38\uC790\uC5F4\uC774 \uC544\uB2CC \uACBD\uC6B0 \uADF8\uB300\uB85C \uBC18\uD658\r\n return obj\r\n }\r\n}\r\n\r\nmaskObjectStrings(data)\r\nmaskObjectStrings(data2)","IsDeferred":false},{"Name":"JSON.stringify","Code":"const data = [{\r\n\ta: {\r\n \tname: \u0022\uD64D\uAE38\uB3D9\u0022,\r\n b: {\r\n email: \u0022abc@gmail.com\u0022,\r\n c: {\r\n \tphone: \u002201012341234\u0022\r\n }\r\n },\r\n }\r\n}]\r\nconst data2 = {\r\n\ta: {\r\n \tname: \u0022\uD64D\uAE38\uB3D9\u0022,\r\n b: {\r\n email: \u0022abc@gmail.com\u0022,\r\n c: {\r\n \tphone: \u002201012341234\u0022\r\n }\r\n },\r\n }\r\n}\r\n\r\nfunction identifyAndMask(input) {\r\n let maskedInput = input\r\n if (isEmail(maskedInput)) {\r\n maskedInput = maskEmail(maskedInput)\r\n } \r\n if (isPhoneNumber(maskedInput)) {\r\n maskedInput = maskPhoneNumber(maskedInput)\r\n } \r\n if (isKoreanName(maskedInput)) {\r\n maskedInput = maskString(maskedInput)\r\n }\r\n return maskedInput\r\n}\r\n\r\nJSON.parse(identifyAndMask(JSON.stringify(data)))\r\nJSON.parse(identifyAndMask(JSON.stringify(data2)))","IsDeferred":false}]}