En México para pagar impuestos es necesario tener una Registro Federal de Contribuyentes.
Tengo un formulario para validar la entrada de este campo con una expresión regular.
Mi validación es muy sencilla porque realmente no valida tan cual las reglas de generacion de un RFC, sólo trato de validar lo elemental.
Existen dos regimenes fiscales: Personas Físicas y Personas Morales
Las personas físicas su RFC esta compuesto de 4 caracteres alfanuméricos, mas 6 numeros y 3 carateres nuevamente alfanuméicos
Ejemplo: AASS810823FGD
La diferencia con las personas morales es que en vez de ser 4 caracteres alfanumericos al inicio de la cadena son un espacio en blanco y luego 3 caracteres.
Ejemplo: ' 'ASS810802FGD
El caso es que cualquier de las dos formas deben ser un total de 13 caracteres.
Para validar esta pequeña regla utilizo la siguiente expresion regular(Yo se que no es la mejor hecha pero se no se mucho de las expresiones regulares)
^(([A-Z]|[a-z]|\s){1})(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))
Y realizo la siguiente función en javascript para validar mi cadena que recojo de la caja de texto.
Código:
function ValidaRfc(rfcStr) { var strCorrecta if (rfcStr.length == 12) { strCorrecta = ' ' + rfcStr; } else { strCorrecta = rfcStr; } var valid = '^(([A-Z]|[a-z]|\s){1})(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))'; var validRfc=new RegExp(valid); var matchArray=strCorrecta.match(validRfc); if (matchArray==null) { alert('Cadena:' + strCorrecta); return; return false; } else { alert('Cadena:' + strCorrecta); return true; } }
Lo que intento hacer es recoger la cadena y validar si es el tamaño es igual a 12 anteponerle al inicio un espacio en blanco(Porque logicamente que los usuarios de mi formulario no van a meter el espacio en blanco), y evaluar mi expresión.
El caso de que sean 13 caracteres evaluo directamente la expresión.
Mi problema es que cuando es el primer caso no funciona mi validacíon, pensaba que de alguna manera la cadena no se le concatenaba el espacio en blanco al inicio, que de alguna manera tal vez no se reconocia de esa manera la cadena. Per no la mando imrpimir con un alert y efectivamente si trae un espacio en blanco al inicio.
Posteriormente pense que el problema era mi expresion regular, pero entre a la pagina http://www.regexplib.com/RETester.aspx, para validarla y realmente si funciona.
Entonces no entiendo que es lo que estoy haciendo mal en esta validación.
Espero que me puedan ayudar, relamente se los agradeceré mucho.