[JavaScript] Une belle regex bien compliquée ...

Une belle regex bien compliquée ... [JavaScript] - Programmation

Marsh Posté le 20-08-2002 à 17:10:06    

Bonjour,
 
J'ai un petit pb avec une regex (en JavaScript).
Le but de cette regex est de valider une adresse IP.
Cette adresse peut etre de la forme : ( 0=<x<=255)
x.x.x.x (normal)
x. (c pour faire des ranges)
x.x. (idem)
x.x.x. (idem)
 
Voila la fonction que j'utilise qui ne marche pas pour tous les cas :
 

Code :
  1. function IsValidIp2(ip)
  2. {
  3. str=new RegExp("((^([0-9]{1,3}\.))([0-9]{1,3}\.){0,2}$)|((^([0-9]{1,3}\.))([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})$)" );
  4. if (str.test(ip))
  5. {
  6.   var SplitIpArray=ip.split("." );
  7.   for (i=0;i<SplitIpArray.length;i++) if (SplitIpArray[i]>255) return false;
  8.   return true;
  9. }
  10. else return false;
  11. }


 
J'arrive à la faire planter ca un chiffre tout con genre 200 passe ... ou 2002-12 par exemple ... je comprend pas pq !
Y'a peut etre une histoire de parenthèses mal placées ... en tout cas celui qui trouve respect ... je me suis bien prit la tête dessus :D
Merci d'avance !


Message édité par SCREAM78 le 20-08-2002 à 17:11:38

---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 20-08-2002 à 17:10:06   

Reply

Marsh Posté le 20-08-2002 à 17:13:45    

les regexp en Javascript, c à partir de quelle version ?
c interprété par les vieux navigateurs ?

Reply

Marsh Posté le 20-08-2002 à 17:18:14    

La version je c po ... en tout cas sur mozilla et opera derniere version ca marche pas mal


---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 20-08-2002 à 17:20:15    

bah fait pas ça avec une regex......

Reply

Marsh Posté le 20-08-2002 à 17:25:09    

greg > je fais comment alors ??? La g un peu de mal a voir ...


Message édité par SCREAM78 le 20-08-2002 à 17:25:23

---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 20-08-2002 à 17:26:46    

bah avec split notamment
enfin ché pas, c surement faisable avec une regex mais bon, c tordu.
tu splittes, tu testes si c un nbre<=255, etc.

Reply

Marsh Posté le 20-08-2002 à 19:01:04    

hop ! une petite regex qui permet de savoir si ton IP est bonne
 

function IsValidIp2(ip) {
 
str = /^((((2(5[0-5]|[0-4][0-9]))|([0-1]?[0-9]{1,2}))\.){1,3}|(((2(5[0-5]|[0-4][0-9]))|([0-1]?[0-9]{1,2}))\.){3}((2(5[0-5]|[0-4][0-9]))|([0-1]?[0-9]{1,2})))$/;
 
return str.test(ip);
}


 
Edit: cela dit la solution de --greg-- est certainement plus simple (mais j'avais un peu de temps à perdre :D )


Message édité par gm_superstar le 20-08-2002 à 19:03:30
Reply

Marsh Posté le 20-08-2002 à 19:11:38    

gm_superstar a écrit a écrit :

hop ! une petite regex qui permet de savoir si ton IP est bonne
 

function IsValidIp2(ip) {
 
str = /^((((2(5[0-5]|[0-4][0-9]))|([0-1]?[0-9]{1,2}))\.){1,3}|(((2(5[0-5]|[0-4][0-9]))|([0-1]?[0-9]{1,2}))\.){3}((2(5[0-5]|[0-4][0-9]))|([0-1]?[0-9]{1,2})))$/;
 
return str.test(ip);
}





cte regex :ouch:

Reply

Marsh Posté le 20-08-2002 à 19:23:07    

Bah en fait il y a un gros copier/coller dedans, mais vu que M. scream78 voulais aussi que x.x.x. et autres soient valides ça complique un peu :o

Reply

Marsh Posté le 21-08-2002 à 08:48:11    

Alors, elle marche finalement cette regex ?

Reply

Marsh Posté le 21-08-2002 à 08:48:11   

Reply

Marsh Posté le 21-08-2002 à 09:33:21    

Je vais tester de suite ... je decrypte pour l'instant :D g les cheveux qui commence a tomber lol


---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 21-08-2002 à 10:25:05    

El_Gringo a écrit a écrit :

Alors, elle marche finalement cette regex ?




Ben elle marche comme la mienne ... meme bug ... on peut rentrer 200 ou 200-20 par ex ... t'avais testé ces cas ?


---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 21-08-2002 à 12:31:13    

[:gotcha]


---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 21-08-2002 à 13:44:54    

SCREAM78 a écrit a écrit :

Ben elle marche comme la mienne ... meme bug ... on peut rentrer 200 ou 200-20 par ex ... t'avais testé ces cas ?



Hein ? Comment ça ?
 
200 -> Faux
200-20 -> Faux

Reply

Marsh Posté le 21-08-2002 à 14:10:44    

Ca marche ... g comprit pq ca marchait pas ... fo pas utiliser le new RegExp() ca le fait chier. J'avais mit ta regex dedans et ca posait des pb ... mais je pense savoir pq ... il doit mal interpreter le '.' '\.' ... il doit considérer ca comme l'expression "n'importe quel caractere" ... enfin c bizarre ... j'utiliserai plus ca ! Merci !


---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 21-08-2002 à 14:45:37    

Juste pour le fun ... la regex marche nickel sauf pour 0.0.0.0 qui n'est pas une IP valide :D !! [:koa] (oui je sais !! "tu pousses le bouchon un peu trop loin maurice" lol) ... donc faut faire un split après pour tester ca et la boucle est bouclé héhé !


---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Marsh Posté le 21-08-2002 à 15:02:52    

Bah, des IP non valides il y en a des millions (classes non attribuées, broadcast...) la regexp n'est la que pour vérifier le format des IP, par pour vérifier l'existence de chacune d'elles.


Message édité par gm_superstar le 21-08-2002 à 15:07:33
Reply

Marsh Posté le 21-08-2002 à 15:05:34    

Oui je sais ... en plus g parlé un peu vite car 0.0.0.0 on peut le voir dans les logs (broadcast DHCP) (je me suis renseigné et je savais po) et vu que j'utilise cette regexp pour un outils de traitement-stats de log fo pas que je l'oubli. VOila merci encore !


---------------
Gates gave us the windows ... Linux gave us the whole house ...
Reply

Sujets relatifs:

Leave a Replay

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