expression reguliere : @IP

expression reguliere : @IP - Programmation

Marsh Posté le 04-04-2002 à 17:58:03    

en fait je voudrais savoir si l'adresse IP saisie est correcte  
j'ai tenté sans les expressions régulieres mais c'est enorme ( test 0<x<255 ...)
 
en fait je vois pas comment en utilisant les expressions régulieres vérifir que chaque nombre de l'@IP est bien compris ( strictement ) entre 0 et 255 .
 
mercie

Reply

Marsh Posté le 04-04-2002 à 17:58:03   

Reply

Marsh Posté le 04-04-2002 à 20:57:57    

ben, en expression régulière, tu devrais pouvoir faire un truc du style [0..255].[0..255].[0..255].[0..255]  si tu fais ça dans Lex et que tu lui envois une IP, il te dira si c'est valable ou pas...  mais bon...  je suis pas vraiment sûr c'est ça que tu voulais

Reply

Marsh Posté le 04-04-2002 à 23:25:13    

enzut a écrit a écrit :

ben, en expression régulière, tu devrais pouvoir faire un truc du style [0..255].[0..255].[0..255].[0..255]  si tu fais ça dans Lex et que tu lui envois une IP, il te dira si c'est valable ou pas...  mais bon...  je suis pas vraiment sûr c'est ça que tu voulais  




 
pour moi [0..255] ça correspond à [0125] c'est à dire de 0 à 2 ou un 5 répété une unique fois.

Reply

Marsh Posté le 04-04-2002 à 23:27:23    

[0..255] ça match "0", "2", "5" et ".". Les expressions régulières c'est fait pour filtrer du texte, pas des données numériques.

Reply

Marsh Posté le 04-04-2002 à 23:28:08    

Je préfèrerais utiliser un split de la chaîne puis faire un foreach dessus pour vérifier chaque nombre.

Reply

Marsh Posté le 04-04-2002 à 23:29:55    

matafan a écrit a écrit :

[0..255] ça match "0", "2", "5" et ".". Les expressions régulières c'est fait pour filtrer du texte, pas des données numériques.  




 
 
Tiens oups j'avais pas tilté que c'était - qu'on utilisait et non .. :)

Reply

Marsh Posté le 05-04-2002 à 09:42:34    

bo j'ai un truc qui marche mais bon si il y a plus court:
 
function valider_ip ($ip) {
  if (is_string ($ip) && ereg('^([0-9]{1,3})\.([0-9]{1,3})\.'
                              '([0-9]{1,3})\.([0-9]{1,3})$'
                              $ip,$part)) {
 
  if ($part[1] <= 255 && $part[2] <= 255 &&
      $part[3] <= 255 && $part[4] <= 255)
     return TRUE; #ip valide
 }
}

 

[jfdsdjhfuetppo]--Message édité par fabriceMerc--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 05-04-2002 à 09:45:32    

houai, pardon, j'ai répondu trop vite.  c'est en effet [0-255] pour tout les "trucs" compris entre la borne 0 et la borne 255...  Ca marche aussi avec [a-z] si on veut les lettres de l'alphabet...  :)

Reply

Marsh Posté le 05-04-2002 à 10:13:00    

enzut a écrit a écrit :

houai, pardon, j'ai répondu trop vite.  c'est en effet [0-255] pour tout les "trucs" compris entre la borne 0 et la borne 255...  Ca marche aussi avec [a-z] si on veut les lettres de l'alphabet...  :)  




 
nonon [0-255] ça correspond à [0125] car il va d'abord prendre l'écart 0-2 puis 5

Reply

Marsh Posté le 05-04-2002 à 12:13:33    

Bon, OK, je vous fais chier une dernière fois (mais cette fois-ci, ça marche, je l'ai tester...
 tu définis:  
ip [0-1][0-9][0-9]|[2][0-4][0-9]|[25][0-5]
 
%%
{ip}"."{ip}"."{ip}"."{ip}  {printf("%s\n", yytext);}
.  {/* rien sinon echo par défaut dans lex */}
 
Bon, c'est du code lex, mais le tout y est...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed