Skip to content

Commit 74886dc

Browse files
committed
fix: 추가 검증 로직 추가
1 parent fed6d4d commit 74886dc

1 file changed

Lines changed: 12 additions & 9 deletions

File tree

src/App.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import * as MissionUtils from "@woowacourse/mission-utils";
2-
31
class StringCalculator {
42
calculate(text) {
53
if (!text) {
@@ -17,18 +15,24 @@ class StringCalculator {
1715
}
1816

1917
const customDelimiter = match[1];
20-
if (!customDelimiter) {
21-
throw new Error("[ERROR] 커스텀 구분자가 비어있습니다.");
18+
if (customDelimiter.length !== 1) {
19+
// 한 글자 제약도 다시 추가하는게 안전해 보입니다.
20+
throw new Error("[ERROR] 커스텀 구분자는 한 글자여야 합니다.");
2221
}
2322

24-
allDelimiters.push(customDelimiter); // 기본 구분자에 커스텀 구분자 추가
23+
allDelimiters.push(customDelimiter);
2524
numbersString = match[2];
2625
}
2726

28-
const escapedDelimiters = allDelimiters.map(
29-
(d) => d.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") // 정규식 특수문자 이스케이프
27+
const escapedDelimiters = allDelimiters.map((d) =>
28+
d.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
3029
);
31-
const delimiterRegex = new RegExp(escapedDelimiters.join("|"));
30+
const validationRegex = new RegExp(`^[0-9${escapedDelimiters.join("")}]+$`);
31+
if (numbersString && !validationRegex.test(numbersString)) {
32+
throw new Error("[ERROR] 허용되지 않은 문자가 포함되어 있습니다.");
33+
}
34+
35+
const delimiterRegex = new RegExp(`[${escapedDelimiters.join("")}]`);
3236

3337
const numberTokens = numbersString.split(delimiterRegex);
3438

@@ -51,7 +55,6 @@ class StringCalculator {
5155
return sum;
5256
}
5357
}
54-
5558
class App {
5659
constructor() {
5760
this.calculator = new StringCalculator();

0 commit comments

Comments
 (0)