UNPKG

react-native-mask-input

Version:

TextInput with mask for ReactNative on both iOS and Android. Includes obfuscation characters feature.

234 lines (205 loc) 3.62 kB
import createNumberMask from './createNumberMask'; import type { Mask, MaskArray } from './formatWithMask.types'; 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 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/, /\d/, ]; 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 = [/\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/]; export default { BRL_CAR_PLATE, BRL_CNPJ, BRL_CPF, BRL_CPF_CNPJ, BRL_CURRENCY, BRL_PHONE, USA_PHONE, CREDIT_CARD, DATE_DDMMYYYY, DATE_MMDDYYYY, DATE_YYYYMMDD, ZIP_CODE, };