PDA

Ver la Versión Completa : Expresión regular para validar dirección IP


noob
10-02-2009, 14:22:30
Hola, estoy utilizando las funciones de la librería RegExp Studio (http://regexpstudio.com/) para realizar validaciones mediante expresiones regulares, tengo esta expresión regular para validar una dirección IP:


function TForm1.IPIncorrecta(Cadena: string): boolean;
var
ExpresionRegular: TRegExpr;
begin
Result := True;
ExpresionRegular := TRegExpr.Create;
ExpresionRegular.Expression := '^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$';
if ExpresionRegular.Exec(Cadena) then
Result := False;
end;


pero con ciertos valores, como por ejemplo, 192.168.0.11 me genera la siguiente excepción:

Project raised exception class 'ERegExpr' with message:
TRegExpr(exec): Loop Without LoopEntry !

He revisado mi expresión regular y parece que todo está correcto. ¿Qué es lo que ocurre?

Saludos.

noob
15-02-2009, 16:54:54
Al final he hecho esto y funciona:


function IPIncorrecta(Cadena: string): boolean;
var
ExpresionRegular: TRegExpr;
begin
Result := True;
ExpresionRegular := TRegExpr.Create;
try
ExpresionRegular.Expression := '^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){2}(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))$';
if ExpresionRegular.Exec(Cadena) then
Result := False;
finally
ExpresionRegular.Free;
end;
end;


No se por qué la anterior no funciona correctamente.

Saludos.