Debería permitir 2 formatos de cadenas de entrada diferentes, cada uno con su propia validación. Entonces, por ejemplo:
AA2222222222222222
y
22222222222222222
Esto significa que si el primer carácter es una letra, debo validar para ^[a-zA-Z]{2}\d{16}$. Si el primer carácter es numérico, debo validar para d{16}.
Traté de escribirlo en una expresión regular condicional:
^(([a-zA-Z])(?([a-zA-Z])^[a-zA-Z]{2}\d{16}$|d{16})pero obtengo un error de patrón y no puedo averiguar qué es exactamente lo que está mal.
Cualquier idea sería apreciada
Traté de escribirlo en una expresión regular condicional
JavaScript no admite la sintaxis condicional de expresiones regulares , por lo que (?ifthen|else) no funciona en JavaScript.
Esto significa que si el primer carácter es una letra, debo validar para ^[a-zA-Z]{2}\d{16}$. Si el primer carácter es numérico, debo validar para d{16}.
Dado que la parte \d{16} es la misma, puede hacer que la parte [a-zA-Z]{2} sea opcional:
/^(?:[a-zA-Z]{2})?\d{16}$/ Eso usa un grupo que no captura alrededor de [a-zA-Z]{2} y hace que todo el grupo sea opcional a través de ? después de.
Si la validación fuera diferente (digamos, tal vez la versión con las letras al principio solo hace \d{14} ), podría usar una alternancia:
/^(?:[a-zA-Z]{2}\d{14}|\d{16})$/ (Cuidado con el problema: sin la no captura alrededor de la alternancia, el ^ sería parte de la primera alternativa pero no de la segunda, y el $ sería parte de la segunda alternativa, pero no de la primera).
Pero en su caso específico, no necesita eso.