Skip to content

Commit fed6d4d

Browse files
committed
fix: 커스텀 구분자 추가 검증
1 parent 8be4730 commit fed6d4d

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

src/App.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ class StringCalculator {
66
return 0;
77
}
88

9-
let delimiter = /[,\:]/;
9+
const defaultDelimiters = [",", ":"];
10+
let allDelimiters = [...defaultDelimiters];
1011
let numbersString = text;
1112

1213
if (text.startsWith("//")) {
@@ -16,22 +17,26 @@ class StringCalculator {
1617
}
1718

1819
const customDelimiter = match[1];
19-
if (customDelimiter.length !== 1) {
20-
throw new Error("[ERROR] 커스텀 구분자는 한 글자여야 합니다.");
20+
if (!customDelimiter) {
21+
throw new Error("[ERROR] 커스텀 구분자가 비어있습니다.");
2122
}
22-
delimiter = new RegExp(
23-
customDelimiter.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
24-
);
23+
24+
allDelimiters.push(customDelimiter); // 기본 구분자에 커스텀 구분자 추가
2525
numbersString = match[2];
2626
}
2727

28-
if (numbersString.split(delimiter).some((token) => token === "")) {
29-
throw new Error(
30-
"[ERROR] 잘못된 입력 형식입니다. (숫자가 없거나 연속된 구분자)"
31-
);
28+
const escapedDelimiters = allDelimiters.map(
29+
(d) => d.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") // 정규식 특수문자 이스케이프
30+
);
31+
const delimiterRegex = new RegExp(escapedDelimiters.join("|"));
32+
33+
const numberTokens = numbersString.split(delimiterRegex);
34+
35+
if (numberTokens.some((token) => token === "")) {
36+
throw new Error("[ERROR] 잘못된 입력 형식입니다. (연속된 구분자)");
3237
}
3338

34-
const numbers = numbersString.split(delimiter).map(Number);
39+
const numbers = numberTokens.map(Number);
3540

3641
const sum = numbers.reduce((currentSum, num) => {
3742
if (isNaN(num)) {

0 commit comments

Comments
 (0)