@@ -4,15 +4,15 @@ import { Injectable } from '@angular/core';
4
4
const FLAGS = new Set ( 'aACL09#&?' ) ;
5
5
const REGEX = new Map ( [
6
6
[ 'C' , / (? ! ^ $ ) / u] , // Non-empty
7
- [ '&' , / [ ^ \p{ Separator} ] / u] , // Whitespace
7
+ [ '&' , / [ ^ \p{ Separator} ] / u] , // Non-whitespace
8
8
[ 'a' , / [ \p{ Letter} \d \p{ Separator} ] / u] , // Alphanumeric & whitespace
9
9
[ 'A' , / [ \p{ Letter} \d ] / u] , // Alphanumeric
10
10
[ '?' , / [ \p{ Letter} \p{ Separator} ] / u] , // Alpha & whitespace
11
11
[ 'L' , / \p{ Letter} / u] , // Alpha
12
12
[ '0' , / \d / ] , // Numeric
13
13
[ '9' , / [ \d \p{ Separator} ] / u] , // Numeric & whitespace
14
14
[ '#' , / [ \d \- + ] / ] , // Numeric and sign
15
- ] ) ;
15
+ ] ) ;
16
16
17
17
/** @hidden */
18
18
export interface MaskOptions {
@@ -40,17 +40,17 @@ export function parseMask(format: string): ParsedMask {
40
40
let mask = format ;
41
41
42
42
for ( let i = 0 , j = 0 ; i < format . length ; i ++ , j ++ ) {
43
- const [ current , next ] = [ format . charAt ( i ) , format . charAt ( i + 1 ) ] ;
44
-
45
- if ( current === '\\' && FLAGS . has ( next ) ) {
46
- mask = replaceCharAt ( mask , j , '' ) ;
47
- literals . set ( j , next ) ;
48
- i ++ ;
49
- } else {
50
- if ( ! FLAGS . has ( current ) ) {
51
- literals . set ( j , current ) ;
43
+ const [ current , next ] = [ format . charAt ( i ) , format . charAt ( i + 1 ) ] ;
44
+
45
+ if ( current === '\\' && FLAGS . has ( next ) ) {
46
+ mask = replaceCharAt ( mask , j , '' ) ;
47
+ literals . set ( j , next ) ;
48
+ i ++ ;
49
+ } else {
50
+ if ( ! FLAGS . has ( current ) ) {
51
+ literals . set ( j , current ) ;
52
+ }
52
53
}
53
- }
54
54
}
55
55
56
56
return { literals, mask } ;
@@ -62,7 +62,6 @@ export function parseMask(format: string): ParsedMask {
62
62
} )
63
63
export class MaskParsingService {
64
64
65
-
66
65
public applyMask ( inputVal : string , maskOptions : MaskOptions , pos : number = 0 ) : string {
67
66
let outputVal = '' ;
68
67
let value = '' ;
@@ -80,7 +79,7 @@ export class MaskParsingService {
80
79
}
81
80
82
81
literals . forEach ( ( val : string , key : number ) => {
83
- outputVal = this . replaceCharAt ( outputVal , key , val ) ;
82
+ outputVal = replaceCharAt ( outputVal , key , val ) ;
84
83
} ) ;
85
84
86
85
if ( ! value ) {
@@ -104,16 +103,15 @@ export class MaskParsingService {
104
103
105
104
for ( const nonLiteralValue of nonLiteralValues ) {
106
105
const char = nonLiteralValue ;
107
- outputVal = this . replaceCharAt ( outputVal , nonLiteralIndices [ pos ++ ] , char ) ;
106
+ outputVal = replaceCharAt ( outputVal , nonLiteralIndices [ pos ++ ] , char ) ;
108
107
}
109
108
110
109
return outputVal ;
111
110
}
112
111
113
112
public parseValueFromMask ( maskedValue : string , maskOptions : MaskOptions ) : string {
114
113
let outputVal = '' ;
115
- const literals : Map < number , string > = this . getMaskLiterals ( maskOptions . format ) ;
116
- const literalValues : string [ ] = Array . from ( literals . values ( ) ) ;
114
+ const literalValues : string [ ] = Array . from ( parseMask ( maskOptions . format ) . literals . values ( ) ) ;
117
115
118
116
for ( const val of maskedValue ) {
119
117
if ( literalValues . indexOf ( val ) === - 1 ) {
@@ -154,7 +152,7 @@ export class MaskParsingService {
154
152
cursor = i + 1 ;
155
153
char = chars . shift ( ) ;
156
154
}
157
- maskedValue = this . replaceCharAt ( maskedValue , i , char ) ;
155
+ maskedValue = replaceCharAt ( maskedValue , i , char ) ;
158
156
}
159
157
160
158
if ( value . length <= 1 ) {
@@ -174,18 +172,7 @@ export class MaskParsingService {
174
172
}
175
173
}
176
174
177
- return { value : maskedValue , end : cursor } ;
178
- }
179
-
180
- public replaceCharAt ( strValue : string , index : number , char : string ) : string {
181
- if ( strValue !== undefined ) {
182
- return strValue . substring ( 0 , index ) + char + strValue . substring ( index + 1 ) ;
183
- }
184
- }
185
-
186
- public getMaskLiterals ( mask : string ) : Map < number , string > {
187
- return parseMask ( mask ) . literals ;
188
-
175
+ return { value : maskedValue , end : cursor } ;
189
176
}
190
177
191
178
/** Validates only non literal positions. */
0 commit comments