Recent

Author Topic: Expresiones regulares o formato de una cadena  (Read 2449 times)

daragor

  • Jr. Member
  • **
  • Posts: 59
    • Blog Webscom
Expresiones regulares o formato de una cadena
« on: November 17, 2021, 08:19:23 pm »
Colegas, saludos a todos, acudo nuevamente para encontrar un poco de luz a una situacion que tengo en lazarus.

Creo q se puede con expresiones regulares con la unidad RegExpr, pero no se como hacerlo.
Lo que necesito es controlar una cadena, ingresada que puede ser de 2 formatos válidos distintos, y el resto se debe descartar

Suponiendo que los formatos son AB123CD y el otro ABC123 esos solamente! no hay simbolos, ni nada raro.. letras mayusculas y numeros
Si una cadena de la lista no contiene 1 de esos 2 formatos, se la descarga, uds podrían ayudarme a tener un algoritmo simple para realizar y recorrido y depurar?

Muchas gracias!
« Last Edit: November 17, 2021, 08:51:03 pm by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

Edson

  • Hero Member
  • *****
  • Posts: 1240
Re: Expresiones regulares o formato de una cadena
« Reply #1 on: November 17, 2021, 08:49:05 pm »
Saludos.

¿Cuáles son los formatos que necesitas validar? A lo mejor no requieren expresiones regulares, pero sino, hay varias librerías disponibles por allí. https://wiki.lazarus.freepascal.org/Regexpr

Recuerdo haber usado alguna de ellas sin mayores problemas.

Lazarus 2.0.10 - FPC 3.2.0 - x86_64-win64 on Windows 8

daragor

  • Jr. Member
  • **
  • Posts: 59
    • Blog Webscom
Re: Expresiones regulares o formato de una cadena
« Reply #2 on: November 17, 2021, 08:51:42 pm »
Es cierto estimado, pero quiero hacer el proceso lo mas rapido posible, ahi en el primer post estan los formatos que necesito, son super sencillos.

1ro: Letra Letra Numero numero numero Letra letra
2do: letra letra letra numero numero numero
En ese orden siempre
« Last Edit: November 17, 2021, 09:05:27 pm by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

Edson

  • Hero Member
  • *****
  • Posts: 1240
Re: Expresiones regulares o formato de una cadena
« Reply #3 on: November 17, 2021, 09:08:44 pm »
1ro: Letra Letra Numero numero numero Letra letra
2do: letra letra letra numero numero numero

En ese caso, es simple, puedes usar las siguientes expresiones:

[A-Z][A-Z]\d\d\d[A-Z][A-Z]

[A-Z][A-Z][A-Z]\d\d\d

Lazarus 2.0.10 - FPC 3.2.0 - x86_64-win64 on Windows 8

daragor

  • Jr. Member
  • **
  • Posts: 59
    • Blog Webscom
Re: Expresiones regulares o formato de una cadena
« Reply #4 on: November 18, 2021, 01:11:55 am »
Excelente, ahora... perdón q no se nada de esta unidad, pude armar un ejemplo para usarla, que esta usando un if...  no se si es lo mejor pero anda perfecto!
En este caso solo controlo el primer formato de 7 digitos

Code: Pascal  [Select][+][-]
  1. procedure Tf_main.Button1Click(Sender: TObject);
  2. var
  3.   Regex: TRegExpr;
  4.   cadena: string;
  5. begin
  6.   Regex:= TRegExpr.Create;
  7.   Regex.Expression:= '[A-Z][A-Z]\d\d\d[A-Z][A-Z]';
  8.   cadena:= trim(pla.Text);
  9.   if Regex.Exec(cadena) then
  10.     res.Caption:= 'Valida 7'
  11.   else
  12.     res.Caption:= 'Invalida!';
  13. end;
  14.  

era todo lo queria, edson, sos un grande, saludos!
« Last Edit: November 18, 2021, 01:23:57 am by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

Jurassic Pork

  • Hero Member
  • *****
  • Posts: 1125
Re: Expresiones regulares o formato de una cadena
« Reply #5 on: November 18, 2021, 02:13:35 am »
hello,
you can try this for the two conditions :
Code: Pascal  [Select][+][-]
  1. R.Expression:= '(^[A-Z]{2}\d{3}[A-Z]{2}$|^[A-Z]{3}\d{3}$)';


Example :
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. const
  3.   expstrTest: array[0..7] of string=('AB123CD','AB123CDE','ABC123',
  4.                                      'FG890AZ','JKLM021','DEFEJR',
  5.                                      'tooAB123CD','AB123CDtoo');    
  6. var
  7.   R:TRegExpr;
  8.   ex : string;
  9. begin
  10.  
  11.   R := TRegExpr.Create;
  12.   R.Expression:= '(^[A-Z]{2}\d{3}[A-Z]{2}$|^[A-Z]{3}\d{3}$)';
  13.   for ex in expStrTest do
  14.      begin
  15.         if R.Exec(trim(ex)) then Memo1.Append(ex + ' -> OK')
  16.         else  Memo1.Append(ex + ' -> NOK');
  17.      end;        
  18. end;
  19.  

Result :
Quote
AB123CD -> OK
AB123CDE -> NOK
ABC123 -> OK
FG890AZ -> OK
JKLM021 -> NOK
DEFEJR -> NOK
tooAB123CD -> NOK
AB123CDtoo -> NOK

Friendly, J.P
« Last Edit: November 18, 2021, 02:27:37 am by Jurassic Pork »
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

daragor

  • Jr. Member
  • **
  • Posts: 59
    • Blog Webscom
Re: Expresiones regulares o formato de una cadena
« Reply #6 on: November 18, 2021, 03:25:11 pm »
thank u Jurassic Pork !! is great,

con esta expresion optimizamos aun mas el proceso de control!

Inculcando el software libre.
https://www.webscom.com.ar

 

TinyPortal © 2005-2018