<a href="https://kakkireniv.github.io/ngx-mask/">
  <h1 align="center">ngx-mask-2</h1>
</a>
<h4 align="center">Forked from JsDaddy/ngx-mask repository, check original repository here: <a href="https://github.com/JsDaddy/ngx-mask/">https://github.com/JsDaddy/ngx-mask/</a></h4>

[![Build Status](https://img.shields.io/travis/JsDaddy/ngx-mask.svg?branch=develop)](https://travis-ci.org/JsDaddy/ngx-mask)
[![npm](https://img.shields.io/npm/v/ngx-mask.svg)](https://www.npmjs.com/package/ngx-mask)
<a href="https://npmjs.org/ngx-mask">
  <img src="https://img.shields.io/npm/dt/ngx-mask.svg" alt="npm downloads" >
</a>
[![npm](https://img.shields.io/npm/dm/ngx-mask.svg)](https://www.npmjs.com/package/ngx-mask)

## Installing

```bash
$ npm install --save ngx-mask-2
```

## Quickstart

Import **ngx-mask-2** module in Angular app.

```typescript
import {NgxMaskModule} from 'ngx-mask-2'

(...)

@NgModule({
  (...)
  imports: [
    NgxMaskModule.forRoot(options)
  ]
  (...)
})
```

Then, just define masks in inputs.

#### Usage

```html
<input type='text' mask='{here comes your mask}' >
```

Also you can use mask pipe

#### Usage

```html
<span>{{phone | mask: '(000) 000-0000'}}</span>
```

#### Examples

| mask | example |
| ------- | ------- |
| 9999-99-99 | 2017-04-15 |
| 0*.00 | 2017.22 |
| 000.000.000-99 | 048.457.987-98 |
| AAAA | 0F6g |
| SSSS | asDF |

## Mask Options
You can define your custom options for all directives (as  object in the mask module) or for each (as attributes for directive)
### specialCharacters (string[ ])
 We have next default characters:

   | character |
   |-----------|
   | / |
   | ( |
   | ) |
   | . |
   | : |
   | - |
   | **space** |
   | + |
   | , |
   | @ |

##### Usage

```html
<input type='text' specialCharacters="[ '[' ,']' , '\' ]" mask="[00]\[000]" >
```

##### Then:

```
Input value: 789-874.98
Masked value: [78]\[987]
```

### patterns ({ [character: string]: { pattern: RegExp, optional?: boolean})
   We have next default patterns:

  | code | meaning |
  |------|---------|
  | **0** | digits (like 0 to 9 numbers) |
  | **9** | digits (like 0 to 9 numbers), but optional |
  | **A** | letters (uppercase or lowercase) and digits |
  | **S** | only letters (uppercase or lowercase) |

##### Usage:

```html
<input type='text' [patterns]="customPatterns" mask="(000-000)" >
```
and in your component

```typescript
public customPatterns = {'0': { pattern: new RegExp('\[a-zA-Z\]')}};
```

##### Then:

```
Input value: 789HelloWorld
Masked value: (Hel-loW)
```

### prefix (string)
   You can add prefix to you masked value
##### Usage

```html
<input type='text' prefix="+7 " mask="(000) 000 00 00" >
```

### appendPrefixToModel (boolean)
   You can choose to append prefix value to NgModel, default value false
##### Usage

```html
<input type='text' prefix="+7 " mask="(000) 000 00 00" [appendPrefixToModel]="true" >
```

### sufix (string)
   You can add sufix to you masked value
##### Usage

```html
<input type='text' sufix=" $" mask="0000" >
```

### dropSpecialCharacters (boolean)
   You can choose if mask will drop special character in the model, or not, default value true
##### Usage

```html
<input type='text' [dropSpecialCharacters]="false" mask="000-000.00" >
```

##### Then:

```
Input value: 789-874.98
Model value: 789-874.98
```

### showMaskTyped (boolean)
  You can choose if mask is shown while typing, or not, default value false
##### Usage

```html
 <input mask="(000) 000-0000" prefix="+7" [showMaskTyped] = "true">
```

### clearIfNotMatch (boolean)
   You can choose clear the input if the input value **not match** the mask, default value false

### Pipe with mask expression and custom Pattern ([string, pattern])
  You can pass array of expression and custom Pattern to pipe
  
##### Usage

```html
 <span>{{phone | mask: customMaska}}</span>
```
and in your component
```
customMaska: [string, pattern];

pattern =  {
    'P': {
        pattern: new RegExp('\\d'),
    }};
  
this.customMaska = ['PPP-PPP', this.pattern];
```

### Repeat mask
  You can pass into mask pattern with brackets
  
##### Usage

```html
 <input type='text' mask="A{4}">
```

## Examples

Check the [demo](https://jsdaddy.github.io/ngx-mask/).
