Tengo una función para verificar y posiblemente modificar códigos postales desde un archivo de prueba. Verifica la longitud correcta de la cadena, que hay un espacio en medio de los 6 caracteres (y si no, para insertar uno), etc. Mi prueba regExp funciona, pero tengo problemas para insertar un espacio en medio de una cadena .
function fixPostalCode(postalCode) { var invalidChars =/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/i; postalCode = postalCode.toString().trim(); if (postalCode.length = 6 && invalidChars.test(postalCode.toString())) { return postalCode.toUpperCase(); } if (postalCode.length = 5 && postalCode.charAt(3) !== ' ' && invalidChars.test(postalCode.toString())) { return postalCode.slice(0, 3) + " " + postalCode.slice(3, 6); } else { throw 'Invalid postal code'; } }La prueba con la que estoy teniendo problemas es esta:
test('an internal space is added', function () { const postalCode = 'A1A1A1'; expect(fixPostalCode(postalCode)).toEqual('A1A 1A1'); });mi método de corte no le hace nada a la cadena.
trim() elimina los espacios en blanco de ambos lados de una cadena, no del medio de la cadena. Como veo en su descripción, está intentando cancelar los espacios en blanco en el middle de la cadena, lo que no es posible con el recorte. Deberías usar replace
function fixPostalCode(postalCode) { let test1 = postalCode.toString().trim(); console.log(test1) ///It will fail let test2 = postalCode.replace(/ +/g, ""); console.log(test2) ///It will be succesfull } fixPostalCode('A1A 1A1');Ha recorrido la mayor parte del camino, pero el Regex posterior no tomó como válido el orden de su inserción de espacio. Sin cambiar la expresión regular, su código es funcional al intercambiar el orden de su método toUpperCase con la inserción de espacio a través de slice :
function fixPostalCode(postalCode) { var invalidChars = new RegExp(/([ABCEGHJKLMNPRSTVXY]\d)([ABCEGHJKLMNPRSTVWXYZ]\d){2}/i); postalCode = postalCode.toString().trim(); if (invalidChars.test(postalCode.toString())) { postalCode = postalCode.toUpperCase(); } if (postalCode.charAt(3) !== ' ') { return postalCode.slice(0, 3) + ' ' + postalCode.slice(3, 6); } else { throw 'Invalid postal code'; } }