Ver Mensaje Individual
  #2  
Antiguo 17-09-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
  • 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;

Última edición por duilioisola fecha: 17-09-2018 a las 10:29:09.
Responder Con Cita