export const normalizeVietnameseWords = (str = ''): string => { str = str.toLowerCase() str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a') str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e') str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i') str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o') str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u') str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y') str = str.replace(/đ/g, 'd') // Some system encode vietnamese combining accent as individual utf-8 characters str = str.replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, '') // Huyền sắc hỏi ngã nặng str = str.replace(/\u02C6|\u0306|\u031B/g, '') // Â, Ê, Ă, Ơ, Ư return str } export const trimWord = (word = ''): string => { return word.trim().replace(/\s\s+/g, ' ') } export const maskCharacter = ( str: string, mask: string, n = 4, isHideBack = false, ): string => { if (!str || str?.length <= n) { return str } if (isHideBack) { return ('' + str).slice(0, -n) + ('' + str).slice(-n).replace(/./g, mask) } return ('' + str).slice(0, -n).replace(/./g, mask) + ('' + str).slice(-n) } export const capitalizeFirstCharacter = (str: string = ''): string => { return str.charAt(0).toUpperCase() + str.slice(1) } export const capitalizeWords = (str: string = ''): string => { return str.replace(/\b\w/g, function (char: string) { return char.toUpperCase() }) } export const splitStringAndWrap = ( str: string | null | number, wrap: string = 'span', ): string => { const charArray = str?.toString().split('') const resultArray = charArray?.map((char) => `<${wrap}>${char}`) ?? [] return resultArray?.join('') }