No soy muy bueno con las expresiones regulares, pero estoy usando lo siguiente en la interfaz con Joi para eliminar los espacios en blanco de un número de teléfono para la validación. Parece funcionar:
entrada: 0758541287 8
Válido:
Joi.string().trim().replace(/\s*/g,"").pattern(new RegExp(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/))
Mi servidor usa express-validator , y me sorprende que esto no elimine los espacios:
No es válido:
body('phone') .isString() .replace(/\s*/g,"") .matches(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/) .withMessage('Please enter a UK phone number'),Tampoco funciona:
body('phone') .isString() .custom(value => Promise.resolve(value.replace(/\s*/g, ""))) .matches(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/) .withMessage('Please enter a UK phone number'),Error de validacion:
validationErrors: [ { value: '0748431287 8', msg: 'Please enter a UK phone number', param: 'phone', location: 'body' } ],Podría eliminar los espacios antes de realizar la solicitud, pero me interesa saber por qué esto no se comporta como me imagino.
Su método de validación personalizado devuelve undefined (porque eso es lo que devuelve console.log(...) ), lo que se interpreta como que el campo no es válido.
Además, la documentación de replace no menciona expresiones regulares. ¿Quizás reemplaza solo subcadenas?
Finalmente, las matches tampoco aparecen en la documentación.
Puede usar las funciones normales de Javascript para replace y match dentro de un método de validación personalizado:
body("phone") .isString() .custom(value => value.replace(/\s*/g, "") .match(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/)) .withMessage("Please enter a UK phone number")