Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   validar patron para cuenta ordenante en recibo electronico de pago (https://www.clubdelphi.com/foros/showthread.php?t=93408)

gmontes 15-09-2018 22:31:00

validar patron para cuenta ordenante en recibo electronico de pago
 
saludos

en el recibo electronico de pago del sat de mexico tiene este patron para capturar el numero de cuenta

[0-9]{10,11}|[0-9]{15,16}|[0-9]{18}|[A-Z0-9_]{10,50}

alguna forma de validar el campo cuenta para que cumpla con estos requisito

no se me ocurre nada, y por mas que busco lo unico que encuentro es el manejo de expresiones del cual no se utilizar :(

segun entiendo es: de 10 y 11 de longitud es numerico, de 15 y 16 numerico etc de 10 y 50 caracteres pueden se numero, letras y espacios

cualquier sugerencia, pista se agradecera.

duilioisola 17-09-2018 10:13:39

  • La barra significa que debe cumplir alguna de las condiciones.
  • Entre corchetes están los caracteres válidos.
  • Entre llaves está cuantas veces se puede repetir uno de esos caracteres.

Por lo tanto, si quieres hacelo a mano, deberás comprobar estas cuatro expresiones. Si alguna es válida, entonces el patrón es válido
  • [0-9]{10,11} - 10 a 11 caracteres numéricos.
  • [0-9]{15,16} - 15 a 16 caracteres numéricos.
  • [0-9]{18} - 18 caracteres numéricos.
  • [A-Z0-9_]{10,50} - 10 a 50 caracteres alfanuméricos o el guión bajo.

Prueba esto:
Código Delphi [-]
function ExpresionValida (s : string) : boolean;
var
  i : integer;
begin
  // Asumo que es válido
  Result := True;

  // Si es una de las tres primeras opciones, compruebo que sean solo numeros
  if ((Length(s) = 10) or (Length(s) = 11) or (Length(s) = 15) or (Length(s) = 16) or (Length(s) = 18)) then
  begin
    // Recorro la cadena
    for i := 1 to Length(s) do
    begin
      // Si no es un número, la cadena no cumple los requisitos
      if not (s[i] in ['0'..'9']) then
        Result := False;
    end;
  end;

  // Si no cumple con las expresiones regulares anteriores compruebo la cuarta opción.
  if (not Result) then
  begin
    // Debe tener entre 10 y 50 caracteres
    if ((Length(s) >= 10) or (Length(s) <= 50)) then
    begin
      for i := 1 to Length(s) do
      begin
        // Debe ser una letra mayúscula o un número o el guión bajo.
        if ((not (s[i] in ['A'..'Z'])) or (not (s[i] in ['0'..'9'])) or (s[i] = '_')) then
          Result := False;
      end;
    end
    else
      Result := False;
  end;
end;

duilioisola 17-09-2018 10:53:26

He corregido algunos errores después de probarlo.
Código Delphi [-]
function ExpresionValida (s : string) : boolean;
var
  i : integer;
begin
  // Asumo que no es válido
  Result := False;

  // Si es una de las tres primeras opciones, compruebo que sean solo numeros
  if ((Length(s) = 10) or (Length(s) = 11) or (Length(s) = 15) or (Length(s) = 16) or (Length(s) = 18)) then
  begin
    Result := True;
    // Recorro la cadena
    for i := 1 to Length(s) do
    begin
      // Si no es un número, la cadena no cumple los requisitos
      if not (s[i] in ['0'..'9']) then
        Result := False;
    end;
  end;

  // Si no cumple con las expresiones regulares anteriores compruebo la cuarta opción.
  if (not Result) then
  begin
    // Debe tener entre 10 y 50 caracteres
    if ((Length(s) >= 10) and (Length(s) <= 50)) then
    begin
      Result := True;
      for i := 1 to Length(s) do
      begin
        // Debe ser una letra mayúscula o un número o el guión bajo.
        if ((not (s[i] in ['A'..'Z'])) and (not (s[i] in ['0'..'9'])) and (s[i] = '_')) then
          Result := False;
      end;
    end;
  end;
end;

Código:

[2018-09-17 10:53:07.856] 123456789 Valido False
[2018-09-17 10:53:07.856] 1234567890 Valido True
[2018-09-17 10:53:07.856] 12345678901 Valido True
[2018-09-17 10:53:07.856] 123456789012 Valido True
[2018-09-17 10:53:07.856] 1234567890123 Valido True
[2018-09-17 10:53:07.856] 12345678901234 Valido True
[2018-09-17 10:53:07.856] 123456789012345 Valido True
[2018-09-17 10:53:07.856] 1234567890123456 Valido True
[2018-09-17 10:53:07.856] 12345678901234567 Valido True
[2018-09-17 10:53:07.856] 123456789012345678 Valido True
[2018-09-17 10:53:07.856] 1234567890123456789 Valido True
[2018-09-17 10:53:07.866] 12345678901234567890 Valido True
[2018-09-17 10:53:07.866] A23456789 Valido False
[2018-09-17 10:53:07.866] A234567890 Valido True
[2018-09-17 10:53:07.866] A2345678901 Valido True
[2018-09-17 10:53:07.866] A23456789012 Valido True
[2018-09-17 10:53:07.866] A234567890123 Valido True
[2018-09-17 10:53:07.866] A2345678901234 Valido True
[2018-09-17 10:53:07.866] A23456789012345 Valido True
[2018-09-17 10:53:07.866] A234567890123456 Valido True
[2018-09-17 10:53:07.866] A2345678901234567 Valido True
[2018-09-17 10:53:07.866] A23456789012345678 Valido True
[2018-09-17 10:53:07.866] A234567890123456789 Valido True
[2018-09-17 10:53:07.866] A23456789012345678901234567890123456789012345678901 Valido False


Casimiro Notevi 17-09-2018 11:09:41

^\||/^\||/^\||/

gmontes 13-10-2018 04:08:52

gracias, lo estoy utilizando ya.


y me da una muy buena direccion para implementar las demas validaciones.

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 14:07:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi