import type { Mask, MaskArray } from './formatWithMask.types'; import createNumberMask from './createNumberMask'; const BRL_CAR_PLATE = [ /[a-zA-Z]/, /[a-zA-Z]/, /[a-zA-Z]/, '-', /\d/, /\w/, /\d/, /\d/, ]; const BRL_CNPJ = [ /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, ]; const BRL_CPF = [ /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/, /\d/, ]; const BRL_CPF_CNPJ = (text?: string) => { const rawValue = text?.replace(/\D+/g, '') || ''; return rawValue.length <= 11 ? BRL_CPF : BRL_CNPJ; }; const BRL_CURRENCY = createNumberMask({ prefix: ['R', '$', ' '], separator: ',', delimiter: '.', precision: 2, }); const BRL_KM = createNumberMask({ separator: ',', delimiter: '.', precision: 1, }); const USA_KM = createNumberMask({ separator: '.', delimiter: ',', precision: 1, }); const USA_PHONE = [ '(', /[2-9]/, /\d/, /\d/, ')', ' ', /[2-9]/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/, ]; const BRL_PHONE = [ '(', /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/, ]; const BRL_CELL = [ '(', /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/, ]; const ONLY_NUMBERS = [ /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, ]; const BRL_PHONE_CELL = (text?: string) => { const rawValue = text?.replace(/\D+/g, '') || ''; return rawValue.length <= 10 ? BRL_PHONE : BRL_CELL; }; const CREDIT_CARD = [ /\d/, /\d/, /\d/, /\d/, ' ', [/\d/], [/\d/], [/\d/], [/\d/], ' ', [/\d/], [/\d/], [/\d/], [/\d/], ' ', /\d/, /\d/, /\d/, /\d/, ] as MaskArray; const DATE_DDMMYYYY: Mask = (text = '') => { const cleanText = text.replace(/\D+/g, ''); let secondDigitDayMask = /\d/; if (cleanText.charAt(0) === '0') { secondDigitDayMask = /[1-9]/; } if (cleanText.charAt(0) === '3') { secondDigitDayMask = /[01]/; } let secondDigitMonthMask = /\d/; if (cleanText.charAt(2) === '0') { secondDigitMonthMask = /[1-9]/; } if (cleanText.charAt(2) === '1') { secondDigitMonthMask = /[012]/; } return [ /[0-3]/, secondDigitDayMask, '/', /[0-1]/, secondDigitMonthMask, '/', /\d/, /\d/, /\d/, /\d/, ]; }; const DATE_MMDDYYYY: Mask = (text = '') => { const cleanText = text.replace(/\D+/g, ''); let secondDigitMonthMask = /\d/; if (cleanText.charAt(0) === '0') { secondDigitMonthMask = /[1-9]/; } if (cleanText.charAt(0) === '1') { secondDigitMonthMask = /[012]/; } let secondDigitDayMask = /\d/; if (cleanText.charAt(2) === '0') { secondDigitDayMask = /[1-9]/; } if (cleanText.charAt(2) === '3') { secondDigitDayMask = /[01]/; } return [ /[0-1]/, secondDigitMonthMask, '/', /[0-3]/, secondDigitDayMask, '/', /\d/, /\d/, /\d/, /\d/, ]; }; const DATE_YYYYMMDD: Mask = (text = '') => { const cleanText = text.replace(/\D+/g, ''); let secondDigitMonthMask = /\d/; if (cleanText.charAt(4) === '0') { secondDigitMonthMask = /[1-9]/; } if (cleanText.charAt(4) === '1') { secondDigitMonthMask = /[012]/; } let secondDigitDayMask = /\d/; if (cleanText.charAt(6) === '0') { secondDigitDayMask = /[1-9]/; } if (cleanText.charAt(6) === '3') { secondDigitDayMask = /[01]/; } return [ /\d/, /\d/, /\d/, /\d/, '/', /[0-1]/, secondDigitMonthMask, '/', /[0-3]/, secondDigitDayMask, ]; }; const ZIP_CODE_BRL = [/\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/]; const ZIP_CODE_USA = [/\d/, /\d/, /\d/, /\d/, /\d/]; const ZIP_CODE = (text?: string) => { const rawValue = text?.replace(/\D+/g, '') || ''; return rawValue.length > 5 ? ZIP_CODE_BRL : ZIP_CODE_USA; }; export { BRL_CAR_PLATE, BRL_CNPJ, BRL_CPF, BRL_CPF_CNPJ, BRL_CURRENCY, BRL_PHONE, BRL_CELL, BRL_PHONE_CELL, USA_PHONE, ZIP_CODE, CREDIT_CARD, DATE_DDMMYYYY, DATE_MMDDYYYY, DATE_YYYYMMDD, ZIP_CODE_BRL, BRL_KM, USA_KM, ONLY_NUMBERS, };