Fonction Match() en javascript

Xeus -  
 petitchevalroux -
Hello world,

voila j'aimerais faire un controle de saisie sur un champs d'un formulaire en utilisant la fonction match() et pas moyen d'arriver a ce que je veux.
L'utilisateur ne saisie que le 2eme et 3eme octets ainsi que les points de séparations.

Explications :

192.168 sont deux octets bloqués (afficher a l'ecran), l'utilisateur peut avoir les choix de saisie suivants :

1=> X.X
2=> X.XX
3=> X.XXX ( jusqu'a 255 seulement )
(on suppose que le 3eme octet ne comprend qu'un seul chiffre).

Voici mon code (faite un copier/coller pour + de clarté) :

function verif()
{
var formip1 = new RegExp( "([0-9]{1})+(\.)+([0-9]{1})","gi" );
var formip2 = new RegExp( "([0-9]{1})+(\.)+([0-9]{2})","gi" );
var formip3 = new RegExp( "([0-9]{1})+(\.)+([0-2]{1})+([0-5]{1})+([0-5]{1})","gi" );
var ip1=window.document.formulaire.ip.value.match(formip1);
var ip2=window.document.formulaire.ip.value.match(formip2);
var ip3=window.document.formulaire.ip.value.match(formip3);

if ( ip1 == null && ip2 == null && ip3 == null )
alert ("L'adresse ip n'est pas valide !");
else alert ("ok");
}

Voila g aussi essayé en php avec ereg, de toute facon c le mm principe et je n'y arrive pas plus.

Merci de m'aider si vous avez une idée.
N'hesitez pas a me poser des questions.

Xeus

8 réponses

alex
 
Et pour tout le monde : attention aux quotes ! Quand on met des caractères spéciaux entre "" il faut les faire précéder d'un "\" si vous voulez annuler leur effet...
1
alex
 
Bonsoir, j'ai regardé un peu ton code et je l'ai testé. Et il ne marche pas. Jusque là je n'apprends rien à personne. Par contre je pense que ca vient de ton expression régulière qui est fausse. Mes conseils :

function verif()
{
  var taChaine = window.document.formulaire.ip.value ;
	var regexp = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/ ;	
	if (taChaine.match(regexp))
		alert ("ok");
	else 
		alert ("L'adresse ip n'est pas valide !");
}


Ce code vérifie la totalité d'une IP, en prenant soin de vérifier que chaque octet est compris entre 0..255. J'ai trouvé cela sur http://www.regular-expressions.info/examples.html
0
Xeus
 
Merci beaucoup alex ta fonction m'a sauvé.

Cependant j'aimerais comprendre un peu mieux la manière dont elle fonctionne parce que c'est un peut vague.

A quoi correspondent les ":" ?
Pourrais-tu éclairé la partie : " [01]?[0-9][0-9]? " de ton code stp ?

Merci encore une fois.

Xeus
0
alex
 
Hé hé hé... Je n'ai pas du tout étudié cette expression régulière car elle me semblait pour le moins complexe (du fait qu'on veuille des valeurs qui ne dépassent pas 255). Donc je vais aller sur http://www.expreg.com et essayer de voir ce que signifie cette caine. Je t'encourage à aussi utiliser le forum de ce site si tu n'as pas de réponse d'ici 1h...

Avec un peu de logique, je peux cependant répondre à ta question n°2. L'expression "[01]?[0-9][0-9]?" recueille les nombres de 0 à 199 ;) D'abord soit "0" soit "1" une fois ou zero fois (?) suivi de deux chiffres, pouvant aller de 0 à 9 chacun. Si je suis pas clair n'hésite pas à le dire !

Par contre les ":" je ne sais pas trop...
0
alex
 
Ca m'a mis la puce à l'oreille, j'aurais dû regarder la regexp avant de poster mon message, ca m'apprendra... Donc en fait l'idée c'est de dire qu'une adresse IP c'est 4 fois le pattern suivant, séparés par des points :

soit "25" suivi d'un chiffre de 0 à 5 (de 250 à 255)
soit "2" suivi d'un chiffre de 0 à 4 suivi d'un chiffre de 0 à 9 (200 à 249)
soit "1" suivi de deux chiffres de 0 à 9 (100 à 199)
soit "0" suivi de deux chiffres de 0 à 9 (000 à 099)

Ca devrait t'éclairer un peu plus je pense...
0
petitchevalroux
 
le ?: en début de parenthèse rend l'expression entre parenthèse non capturante

astuces javascript
0
Marmot Messages postés 580 Statut Membre 69
 
En matière d'expressions rationnelles j'encourage tout le monde à d'abord tester son expression sur http://magali.contensin.free.fr/html/JAVASCRIPT/cours/PREDEF/ExpressionsReg.html (enregistrer sous en local fonctionne également)

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Xeus
 
Ok ok g compris. Merci pour tes explications ca m'a aider.

G enfin réussi a faire le controle de saisie sur cet ip de malheur, g failli laisser tomber.

Enfin bref merci a alex et marmot pour leur aide.

Xeus
0
ponpon
 
Tu peux indiquer ton code pour vérifier l'IP ?
Moi j'aimerai vérifier si le nombre de caractère est valide
mais j'ai pas accès au net a mon taf juste au site ccm
0
ponpon
 
En fait c'est bon j'ai repris le code indiquer :

var regexp = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/

Merci pour les info
0
brahimhackman Messages postés 14 Statut Membre 1
 
//verification regex les date format francais.
essaie mon code var datetest = '19/12/2010';
if (datetest.match('^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$'))
{
alert(1);
}else{
alert(0);
}
0