0.5.1 • Published 11 months ago
ts-simple-mask v0.5.1
Why
Need for a solution that works on different stacks.
Features
- Mask, unmask input texts, apply custom rules.
- Money functions.
Table of Contents
Getting Started
Install
npm install ts-simple-mask
Quickstart
There are some ready-to-use standard rules:
- '0' = any digit
- 'A' = any alphanumeric
- 'S' = any letter
- 'X' = any letter and transform to uppercase
- 'x' = any letter and transform to lowercase
- 'Z' = any alphanumeric and transform to uppercase
- 'z' = any alphanumeric and transform to lowercase
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const { masked, unmasked } = TsMask.mask("01011987", "00/00/0000");
TS Mask API
- Mask text
mask(value: string, maskRule: string)
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const { masked, unmasked } = TsMask.mask("ABC-1A23", "SSS-0A00");
- Unmask text
unmask(value: string)
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const unmasked = TsMask.unmask("ABC-1A23");
- Mask money
maskMoney(value: string)
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const { masked, unmasked } = TsMask.maskMoney("123456");
- Unmask money
unmaskMoney(value: string)
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const unmasked = TsMask.unmaskMoney("1.234,56");
- Get default masks
getMask(value: string, type: MaskType)
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const value = "46963603006";
TsMask.mask(value, TsMask.getMask(value, MaskType.DOCUMENT_BR));
- Get placeholder
getPlaceholder(maskRule: string)
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const placeholder = TsMask.getPlaceholder("SSS-0A00");
- Interfaces
interface TsMaskOptions {
rulesMask?: MaskRules;
rulesMoney?: MaskMoneyRules;
}
interface MaskMoneyRules {
thousands: string;
decimal: string;
precision: number;
prefix?: string;
allowNegative?: boolean;
beforeMask?: (value: number) => number;
afterMask?: (value: string) => string;
}
interface MaskRules {
map: Map<string, MaskOptions>;
beforeMask?: (value: string) => string;
afterMask?: (value: string) => string;
}
interface MaskOptions {
pattern: RegExp;
transform?: (
prevValue: string,
newChar: string
) => { prevValue: string; newChar: string };
}
Customize
- Default Rules
const DEFAULT_MONEY_RULES = {
thousands: ".",
decimal: ",",
precision: 2,
};
const DEFAULT_MASK_RULES = {
map: new Map<string, MaskOptions>([
["0", { pattern: /\d/ }],
["A", { pattern: /[a-zA-Z0-9]/ }],
["S", { pattern: /[A-Za-z]/ }],
[
"X",
{
pattern: /[A-Za-z]/,
transform: (prevValue, newChar) => ({
prevValue,
newChar: newChar.toLocaleUpperCase(),
}),
},
],
[
"x",
{
pattern: /[A-Za-z]/,
transform: (prevValue, newChar) => ({
prevValue,
newChar: newChar.toLocaleLowerCase(),
}),
},
],
[
"Z",
{
pattern: /[a-zA-Z0-9]/,
transform: (prevValue, newChar) => ({
prevValue,
newChar: newChar.toLocaleUpperCase(),
}),
},
],
[
"z",
{
pattern: /[a-zA-Z0-9]/,
transform: (prevValue, newChar) => ({
prevValue,
newChar: newChar.toLocaleLowerCase(),
}),
},
],
]),
};
- Custom Rules
import createTsMask, { MaskOptions } from "ts-simple-mask";
const rulesMoney = {
thousands: " ",
decimal: ".",
precision: 3,
prefix: "R$",
};
const rulesMask = {
map: new Map<string, MaskOptions>([
[
"#",
{
pattern: /[A-Za-z]/,
transform: (prevValue, newChar) => ({
prevValue,
newChar: newChar.toLocaleUpperCase(),
}),
},
],
["9", { pattern: /\d/ }],
]),
};
const TsMask = createTsMask({
rulesMask,
rulesMoney,
});
const { masked, unmasked } = TsMask.mask("abcd", "####");
//transform uppercase
//return ABCD
const { masked, unmasked } = TsMask.maskMoney("123456789");
//return R$123 456.89
TsMask.setRuleMask(rulesMask);
TsMask.setRuleMoney(rulesMoney);
//change the mask rules
- Before Mask, After Mask
import createTsMask, { MaskOptions } from "ts-simple-mask";
const TsMask = createTsMask({
rulesMask: {
map: new Map<string, MaskOptions>([["#", { pattern: /[A-Za-z]/ }]]),
beforeMask: (value) => (value === "hello" ? "helloworld" : value),
afterMask: (value) => (value.length > 10 ? value.slice(0, -1) : value),
},
rulesMoney: {
thousands: ".",
decimal: ",",
precision: 2,
beforeMask: (value) => (value === 1000 ? 1001 : value),
afterMask: (value) => "$" + value,
},
});
const { masked } = TsMask.mask("hello", "###########");
//return helloworld
const { masked } = TsMask.maskMoney("1000");
//return $1001
Examples
Practical use examples
Vanilla JS
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const value = "31072024";
const { masked } = TsMask.mask(value, "00/00/0000");
document.querySelector(".masked").innerHTML = masked;
React
import React from "react";
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
export const TextForm = () => {
const [value, setValue] = React.useState("");
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { masked } = TsMask.maskMoney(e.target.value);
setValue(masked);
};
return <input type="text" value={value} onChange={handleChange} />;
};
React Native
import React from "react";
import { TextInput } from "react-native";
import createTsMask, { MaskType } from "ts-simple-mask";
const TsMask = createTsMask();
export const TextForm = () => {
const [value, setValue] = React.useState("");
const handleChange = (text: string) => {
const { masked } = TsMask.mask(
text,
TsMask.getMask(text, MaskType.DOCUMENT_BR)
);
setValue(masked);
};
return <TextInput onChangeText={handleChange} value={value} />;
};
Vue
<script setup>
import createTsMask from "ts-simple-mask";
const TsMask = createTsMask();
const onInput = (event) => {
const { masked } = TsMask.mask(event.target.value.toUpperCase(), "SSS-0A00");
event.target.value = masked;
};
</script>
<template>
<input @input="onInput" />
</template>
Nodejs
import createTsMask, { maskType } from "ts-simple-mask";
const TsMask = createTsMask();
router.get("/", async () => {
const value = "123456789";
const { masked } = TsMask.mask(
value,
TsMask.getMask(value, MaskType.ZIPCODE_BR)
);
return masked;
});
License
0.5.1
11 months ago
0.5.0
12 months ago
0.4.0
12 months ago
0.3.2
12 months ago
0.3.1
12 months ago
0.3.0
12 months ago
0.2.0
12 months ago
0.1.4
12 months ago
0.1.3
12 months ago
0.1.2
12 months ago
0.1.1
12 months ago
0.1.0
12 months ago
0.0.23
12 months ago
0.0.22
12 months ago
0.0.21
12 months ago
0.0.20
12 months ago
0.0.19
12 months ago
0.0.17
12 months ago
0.0.16
12 months ago
0.0.15
12 months ago
0.0.13
12 months ago
0.0.11
12 months ago
0.0.10
12 months ago
0.0.9
12 months ago
0.0.8
12 months ago
0.0.7
12 months ago
0.0.6
12 months ago
0.0.5
12 months ago
0.0.4
12 months ago
0.0.3
12 months ago
0.0.2
12 months ago
0.0.1
12 months ago
0.0.0
12 months ago