1- import * as MissionUtils from "@woowacourse/mission-utils" ;
2-
31class 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-
5558class App {
5659 constructor ( ) {
5760 this . calculator = new StringCalculator ( ) ;
0 commit comments