Espacios opcionales en expresión regular para validar campo

publicado por: Anonymous

Estaba haciendo una expresión regular para validar un campo de un formulario y me ha surgido una duda.

var expReg = /^([A-Z]|[a-z]){4}sd{6}sd/;

Esa es mi expresión regular. Coincide con un campo parecido a este:

ABCD 123456 7

  • Cuatro letras.
  • Un espacio.
  • Seis números.
  • Un espacio.
  • Un último número.

Dado que es un campo que seguramente se utilice mucho y con prisa, quiero testear que pueda no haber espacios. No suelo utilizar mucho expresiones regulares así que, lo que he hecho es crear una nueva sin espacios y testearlas ambas:

var expReg = /^([A-Z]|[a-z]){4}d{6}d/;

Sin embargo ahora tengo la duda de si sería posible hacer esto en una sola expresión, es decir, poder decirle que en un punto concreto pueda haber o no un espacio.

¿Existe una forma de hacerlo o es obligado crear y comprobar ambas?

solución

Intenta agregandole la condicional ? en las expresiones s :

/^([A-Z]|[a-z]){4}s?d{6}s?d$/

Esto lo que hace es que los espacios sea opcionales. Tambien deberias de agregarle la expresion $ al final de la expresión que en conjunto con ^ indica que lea todo el string:

_x000D_

_x000D_

function validar()_x000D_
{_x000D_
  var entrada = document.getElementById("entrada");_x000D_
  _x000D_
  if(/^[A-Za-z]{4}s?d{6}s?d$/.test(entrada.value))_x000D_
  {_x000D_
    console.log("valor valido");_x000D_
  }_x000D_
  else{_x000D_
    console.log("valor invalido");_x000D_
  }_x000D_
}

_x000D_

<input type="text" id="entrada" />_x000D_
<button onclick="validar()">Validar</button>

_x000D_

_x000D_

_x000D_

Tanto ABCD 123456 7 como ABCD1234567 son correctos, sin embargo ABCD 1234567 y ABCD123456 7 también son validos debido a la condicional de los espacios. Si quieres evitar esto entonces utiliza expresiones de grupo de captura donde solo es valido si se cumplen una de las dos reglas que deseas:

_x000D_

_x000D_

function validar()_x000D_
{_x000D_
  var entrada = document.getElementById("entrada");_x000D_
  _x000D_
  if(/^([A-Za-z]{4}sd{6}sd|[A-Za-z]{4}d{6}d)$/.test(entrada.value))_x000D_
  {_x000D_
    console.log("valor valido");_x000D_
  }_x000D_
  else{_x000D_
    console.log("valor invalido");_x000D_
  }_x000D_
}

_x000D_

<input type="text" id="entrada" />_x000D_
<button onclick="validar()">Validar</button>

_x000D_

_x000D_

_x000D_

Esto significa que si no se cumple a expresion donde acepta los espacios:

[A-Za-z]{4}sd{6}sd

Entonces se procedera a validar la siguiente expresion donde no se acepta los espacios

|[A-Za-z]{4}d{6}d

De lo contrario sera invalido.


No se si habras notado que le hice algunos cambios a tu expresión. La expresión ([A-Z]|[a-z]){6} se puede reducir a [A-Za-z]{6} y así evitar que la expresion de match con otro string y sea arojado en el resultado. Tambien evita que se hagan 2 búsquedas tanto para mayúscula como para minúsculas.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *