elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: Expresión regular para formato serial "12345-ABCDE-12345"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: Expresión regular para formato serial "12345-ABCDE-12345"  (Leído 4,786 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: Expresión regular para formato serial "12345-ABCDE-12345"
« en: 13 Junio 2022, 18:23 pm »

Hola, estoy teniendo problemas con una expresión regular donde se reemplazarán los valores con vacío donde no cumpla el formato de un serial.
"12345-ABCDE-12345" Es decir, 5 números seguidos de un guión medio seguidos de 6 letras mayúsculas de la A a la Z, nuevamente un guión medio y otros 5 numeros.

Código
  1. $('#form_verify_email').on('keyup', function(e)
  2. {
  3.       if($('input[name=input_code_email]').is(e.target))
  4.       {
  5.              form_verify_email.input_code_email.value = String(form_verify_email.input_code_email.value.substring(0, 5)).replace(/[^0-9]+/g, '');
  6.              form_verify_email.input_code_email.value = (form_verify_email.input_code_email.value)+String(form_verify_email.input_code_email.value.substring(5, 6)).replace(/[^-]+/g, '');
  7.              form_verify_email.input_code_email.value = (form_verify_email.input_code_email.value)+String(form_verify_email.input_code_email.value.substring(6, 11)).replace(/[^A-Z]+/g, '');
  8.              form_verify_email.input_code_email.value = (form_verify_email.input_code_email.value)+String(form_verify_email.input_code_email.value.substring(11, 12)).replace(/[^-]+/g, '');
  9.              form_verify_email.input_code_email.value = (form_verify_email.input_code_email.value)+String(form_verify_email.input_code_email.value.substring(12, 17)).replace(/[^0-9]+/g, '');
  10.        }
  11. });
  12.  

De momento tengo esto, pero no entiendo ya que va bien hasta los primeros 5 números pero después aunque ponga guión medio no me lo toma y me lo quita.


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Pregunta]: Expresión regular para formato serial "12345-ABCDE-12345"
« Respuesta #1 en: 13 Junio 2022, 19:41 pm »

Hola!

No sé mucho de programación web, pero creo que en la 1era instrucción, estás pisando el valor del textbox (le estás asignando un valor).

Si es así, quizás deberías guardar el valor del textbox en una variable e ir reemplazando en la misma para finalmente asignarle al textbox.

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: Expresión regular para formato serial "12345-ABCDE-12345"
« Respuesta #2 en: 13 Junio 2022, 20:36 pm »

Porque estás remplazando la cadena de texto en cada instrucción. Solo la primera instrucción toma los primeros 5 caracteres y aplica el patrón de remplazo. Ese valor se guarda en la misma variable que utilizas para hacer validación. Obviamente en las siguientes instrucciones no existen los caracteres después del índice 5...
En línea

l337*


Desconectado Desconectado

Mensajes: 1.016


I've been thinking...


Ver Perfil
Re: [Pregunta]: Expresión regular para formato serial "12345-ABCDE-12345"
« Respuesta #3 en: 24 Junio 2022, 04:35 am »

por qué no lo haces más simple?

Código:
const input = document.getElementById('giftcard-input');

const validKeys = /[a-z0-9\-]/i;
const validLetters = /[a-z]/i;

input.onkeydown = (e) => {
  const char = e.key;
  const currentStr = input.value;
  const currentStrLen = currentStr.length;

  // agrega teclas especiales como backspace o flecha derecha/izq
  if (char === "Backspace") {
    return true;
  }
  
  if (validKeys.test(char)) {
    // ya tenemos 10 digitos, 2 guiones, 5 letras
    if (currentStrLen === 17) {
      return false;
    }

    // debe ser numero
    if (currentStrLen < 5 || currentStrLen > 11) {
      return !isNaN(char);

    // debe ser guion
    } else if (currentStrLen === 5 || currentStrLen === 11) {
      return char === "-";

    // debe ser letra
    } else {
      return validLetters.test(char);
    }
  }

  // no es ningun char valido, no lo aceptamos en el input
  return false;
}


tambien podrias hacerlo por partes como -4 sugerio arriba, tomas los primeros 5, validas, luego los siguientes 5, etc.

otra es tener 3 inputs diferentes y solo validar si es letra o digito, podrias usar el attributo pattern y required en el input para que el navegador lo valide solo.

no hay necesidad de complicarse con tanto regex ni tratar de solucionar para cualquier caso inexistente.
« Última modificación: 24 Junio 2022, 04:38 am por l337* » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La contraseña del presidente sirio era: 12345 « 1 2 »
Noticias
wolfbcn 12 5,375 Último mensaje 10 Febrero 2012, 20:33 pm
por dimitrix
[Expresion Regular] Para leer hora y minutos delimitada con ":" ?
PHP
Diabliyo 2 4,878 Último mensaje 26 Septiembre 2012, 08:20 am
por ~ Yoya ~
[Pregunta]: ¿Incrementar de a 1 un formato "versión"?
Desarrollo Web
Leguim 2 2,313 Último mensaje 30 Noviembre 2019, 04:57 am
por Leguim
Trump amenaza con "regular" o incluso "cerrar" redes sociales tras el cuestionam
Noticias
El_Andaluz 5 4,675 Último mensaje 29 Mayo 2020, 19:13 pm
por Machacador
[Pregunta]: Formato de imágenes "image/webp"
Desarrollo Web
Leguim 1 3,982 Último mensaje 5 Marzo 2021, 05:55 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines