Necesito conseguir:
Ejemplos:
'a' y 'g' devuelve 1
'A' y 'C' devuelve 1
'b' y 'G' devuelve 0
'B' y 'g' devuelve 0
'0' y '?' devuelve -1
Ahora mi código no es correcto:
function sameCase(a, b) { if (a.match(/az/) && b.match(/az/)) { return 1; } if (a.match(/AZ/) && b.match(/AZ/)) { return 0; } if (b.match(/az/) && a.match(/AZ/)) { return 0; } return -1; } console.log(sameCase('a', 'b')); console.log(sameCase('A', 'B')); console.log(sameCase('a', 'B')); console.log(sameCase('B', 'g')); console.log(sameCase('0', '?'));Ayuda por favor..
Estás usando expresiones regulares incorrectamente. Deberías haber usado /[az]/ si quieres comprobar que tu carácter es una letra de la a a la z.
function sameCase(a, b){ if (a.match(/[az]/) && b.match(/[az]/)) { return 1; } if (a.match(/[AZ]/) && b.match(/[AZ]/)) { return 1; } if (b.match(/[az]/) && a.match(/[AZ]/)) { return 0; } if (a.match(/[az]/) && b.match(/[AZ]/)) { return 0; } return -1; } console.log(sameCase('a', 'b')); console.log(sameCase('A', 'B')); console.log(sameCase('a', 'B')); console.log(sameCase('B', 'g')); console.log(sameCase('0', '?'));Está utilizando una sintaxis incorrecta para las expresiones regulares.
/az/ coincide con la cadena az . Si desea probar un rango de caracteres, debe envolver el rango en [] .
Además, sus valores de retorno no coincidieron con las expectativas que describió.
function sameCase(a, b) { if ( (a.match(/[az]/) && b.match(/[az]/)) || (a.match(/[AZ]/) && b.match(/[AZ]/)) ) { return 1; } if ( (b.match(/[az]/) && a.match(/[AZ]/)) || (b.match(/[AZ]/) && a.match(/[az]/)) ) { return 0; } return -1; } console.log(sameCase('a', 'b')); console.log(sameCase('A', 'B')); console.log(sameCase('a', 'B')); console.log(sameCase('B', 'g')); console.log(sameCase('0', '?'));+++ Solo como información adicional +++
Construyendo sobre el enfoque de connexo y convirtiéndolo en una solución que no solo cubra las letras mayúsculas y minúsculas latinas básicas, uno podría reemplazar cada clase de carácter con su contraparte de escapes de propiedades unicode que además cubre cada una mucho más amplia variedad de personajes...
// based on basic latin letter character classes. function sameCaseBasicLatin(a, b) { if ( (a.match(/[az]/) && b.match(/[az]/)) || (a.match(/[AZ]/) && b.match(/[AZ]/)) ) { return 1; } if ( (b.match(/[az]/) && a.match(/[AZ]/)) || (b.match(/[AZ]/) && a.match(/[az]/)) ) { return 0; } return -1; } // ... ok ... console.log('`sameCaseBasicLatin` invoked with basic latin letters'); console.log(sameCaseBasicLatin('a', 'b')); console.log(sameCaseBasicLatin('A', 'B')); console.log(sameCaseBasicLatin('a', 'B')); console.log(sameCaseBasicLatin('B', 'g')); console.log(sameCaseBasicLatin('0', '?')); // ... but ... not ok. console.log('`sameCaseBasicLatin` invoked with diacritic latin letters'); console.log(sameCaseBasicLatin('â', 'ê')); console.log(sameCaseBasicLatin('Â', 'Ê')); console.log(sameCaseBasicLatin('â', 'Î')); console.log(sameCaseBasicLatin('Ô', 'ä')); console.log(sameCaseBasicLatin('-', '#')); // make use of unicode property escapes. function sameCaseLetters(a, b) { // lowercase letter as unicode property escape. const regXLowerCaseLetter = (/\p{Ll}/u); // uppercase letter as unicode property escape. const regXUpperCaseLetter = (/\p{Lu}/u); if ( (regXLowerCaseLetter.test(a) && regXLowerCaseLetter.test(b)) || (regXUpperCaseLetter.test(a) && regXUpperCaseLetter.test(b)) ) { return 1; } if ( (regXLowerCaseLetter.test(a) && regXUpperCaseLetter.test(b)) || (regXUpperCaseLetter.test(a) && regXLowerCaseLetter.test(b)) ) { return 0; } return -1; } // ... ok ... console.log('`sameCaseLetters` invoked with basic latin letters'); console.log(sameCaseLetters('a', 'b')); console.log(sameCaseLetters('A', 'B')); console.log(sameCaseLetters('a', 'B')); console.log(sameCaseLetters('B', 'g')); console.log(sameCaseLetters('0', '?')); // ... and ... also ok. console.log('`sameCaseLetters` invoked with diacritic latin letters'); console.log(sameCaseLetters('â', 'ê')); console.log(sameCaseLetters('Â', 'Ê')); console.log(sameCaseLetters('â', 'Î')); console.log(sameCaseLetters('Ô', 'ä')); console.log(sameCaseLetters('-', '#')); .as-console-wrapper { min-height: 100%!important; top: 0; }