tengo una función regex como esta:
const format = (value) => { if (typeof value === 'string') { return value.replace(/(\d{3})(\d+)/g, '$1-$2'); } }cuando consuelo sin ingresar en formik setfieldvalue, produce expresiones regulares correctas como 111-1111111:
const custom = (value) => { console.log('valuemain',format(value)); //this valuemain: 111-1111111 formikRef.current.setFieldValue('customnumb',value) }pero cuando ingreso expresiones regulares en formik setfieldvalue se vuelve como 111-111-111:
const custom = (value) => { console.log('valuemain',format(value)); //this valuemain: 111-111-111 formikRef.current.setFieldValue('customnumb',format(value)) }Reemplace de antemano todas las apariciones del guión "-" con "" ( cadena vacía )
const format = (val = "") => val.replace(/-/g, "").replace(/(\d{3})(\d+)/g, '$1-$2'); console.log(format("1111111111")); // "111-1111111" console.log(format("111-1111111")); // "111-1111111" console.log(format("111-11-1-1-1-11")); // "111-1111111" Como obviamente solo te interesan los números enteros ; para ser políticamente más correcto, en lugar de reemplazar solo los guiones "-" , podría reemplazar (usando RegExp \D Not a Digit ) — todo lo que no sea un dígito :
const format = (val = "") => { // @TODO: do val checks if needed here. return val .replace(/\D/g, "") // Remove everything that is not a digit .replace(/(\d{3})(\d+)/g, '$1-$2'); // Format as desired }; console.log(format("1111111111")); // "111-1111111" console.log(format("111-1111111")); // "111-1111111" console.log(format("111-11-1-1-1-11")); // "111-1111111"