11export class String {
2- public static Empty : string = "" ;
2+ private static readonly regexNumber = / { ( \d + ( : \w * ) ? ) } / g;
3+ private static readonly regexObject = / { ( \w + ( : \w * ) ? ) } / g;
4+
5+ public static Empty : string = '' ;
36
47 public static IsNullOrWhiteSpace ( value : string ) : boolean {
58 try {
@@ -51,27 +54,42 @@ export class String {
5154
5255 public static Format ( format : string , ...args : any [ ] ) : string {
5356 try {
54- return format . replace ( / { ( \d + ( : \w * ) ? ) } / g, function ( match , i ) { //0
55- let s = match . split ( ':' ) ;
56- if ( s . length > 1 ) {
57- i = i [ 0 ] ;
58- match = s [ 1 ] . replace ( '}' , '' ) ; //U
59- }
57+ if ( format . match ( String . regexNumber ) )
58+ return String . format ( String . regexNumber , format , args ) ;
59+
60+ if ( format . match ( String . regexObject ) )
61+ return String . format ( String . regexObject , format , args , true ) ;
6062
61- let arg = args [ i ] ;
62- if ( arg == null || arg == undefined || match . match ( / { d + } / ) )
63- return arg ;
64-
65- arg = String . parsePattern ( match , arg ) ;
66- return typeof arg != 'undefined' && arg != null ? arg : String . Empty ;
67- } ) ;
63+ return String . Empty ;
6864 }
6965 catch ( e ) {
7066 console . log ( e ) ;
7167 return String . Empty ;
7268 }
7369 }
7470
71+ private static format ( regex : any , format : string , args : any , parseByObject : boolean = false ) : string {
72+ return format . replace ( regex , function ( match , x ) { //0
73+ let s = match . split ( ':' ) ;
74+ if ( s . length > 1 ) {
75+ x = s [ 0 ] . replace ( '{' , '' ) ;
76+ match = s [ 1 ] . replace ( '}' , '' ) ; //U
77+ }
78+
79+ let arg ;
80+ if ( parseByObject )
81+ arg = args [ 0 ] [ x ] ;
82+ else
83+ arg = args [ x ] ;
84+
85+ if ( arg == null || arg == undefined || match . match ( / { \d + } / ) )
86+ return arg ;
87+
88+ arg = String . parsePattern ( match , arg ) ;
89+ return typeof arg != 'undefined' && arg != null ? arg : String . Empty ;
90+ } ) ;
91+ }
92+
7593 private static parsePattern ( match : 'L' | 'U' | 'd' | 's' | 'n' | string , arg : string | Date | number | any ) : string {
7694 switch ( match ) {
7795 case 'L' :
@@ -97,15 +115,17 @@ export class String {
97115 }
98116 break ;
99117 case 'n' : //Tausender Trennzeichen
100- let replacedString = arg . replace ( / , / g, '.' ) ;
118+ if ( typeof ( arg ) !== "string" )
119+ arg = arg . toString ( ) ;
120+ let replacedString = arg . replace ( / , / g, '.' ) ;
101121 if ( isNaN ( parseFloat ( replacedString ) ) || replacedString . length <= 3 )
102122 break ;
103123
104124 let numberparts = replacedString . split ( / [ ^ 0 - 9 ] + / g) ;
105125 let parts = numberparts ;
106126
107- if ( numberparts . length > 1 ) {
108- parts = [ String . join ( '' , ...( numberparts . splice ( 0 , numberparts . length - 1 ) ) ) , numberparts [ numberparts . length - 1 ] ] ;
127+ if ( numberparts . length > 1 ) {
128+ parts = [ String . join ( '' , ...( numberparts . splice ( 0 , numberparts . length - 1 ) ) ) , numberparts [ numberparts . length - 1 ] ] ;
109129 }
110130
111131 let integer = parts [ 0 ] ;
@@ -114,8 +134,8 @@ export class String {
114134 var output = ( mod > 0 ? ( integer . substring ( 0 , mod ) ) : String . Empty ) ;
115135 var firstGroup = output ;
116136 var remainingGroups = integer . substring ( mod ) . match ( / .{ 3 } / g) ;
117- output = output + '.' + String . Join ( '.' , remainingGroups ) ;
118- arg = output + ( parts . length > 1 ? ',' + parts [ 1 ] : '' ) ;
137+ output = output + '.' + String . Join ( '.' , remainingGroups ) ;
138+ arg = output + ( parts . length > 1 ? ',' + parts [ 1 ] : '' ) ;
119139 return arg ;
120140 default :
121141 break ;
@@ -151,24 +171,24 @@ export class String {
151171 let times = splitted [ splitted . length - 1 ] . split ( ' ' ) ;
152172 let time = String . Empty ;
153173 if ( times . length > 1 )
154- time = times [ times . length - 1 ] ;
174+ time = times [ times . length - 1 ] ;
155175
156176 let year = splitted [ splitted . length - 1 ] . split ( ' ' ) [ 0 ] ;
157177 let month = splitted [ splitted . length - 2 ] ;
158178 let day = splitted [ splitted . length - 3 ] ;
159179 let result = `${ year } -${ month } -${ day } `
160-
180+
161181 if ( ! String . IsNullOrWhiteSpace ( time ) && time . length > 1 )
162182 result += `T${ time } ` ;
163183 else
164- result += "T00:00:00" ;
184+ result += "T00:00:00" ;
165185
166186 return result ;
167187 }
168188
169189 private static formatNumber ( input : number , formatTemplate : string ) : string {
170190 let count = formatTemplate . length ;
171- let stringValue = input . toString ( ) ;
191+ let stringValue = input . toString ( ) ;
172192 if ( count <= stringValue . length )
173193 return stringValue ;
174194
0 commit comments