Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2007, 00h57   #1
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
Par défaut encore un (preg_match_all)

Bonjour je bute sur un ptit truc

j'ai essayer de faire une fonction de verification de formulaire pour caracteres alphanumeriques mais lors que je l'utilise

ca me retourne uniquement le premier caractere de ma variable et le reste et supprimer !!

Je tourne en rond !!!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 function mols_verif_alphanum($Content)
	{
     if (preg_match_all("/([^a-zA-Z0-9 ])/i", $Content,$trouve)) 
		{
		 $erreur = implode(" ",$trouve[0]);
		 return (array( 2, $erreur));
		}
	 else
		{
		 return ($Content);
		}			
	}
Merci par avance pour l'aide !!
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2007, 10h39   #2
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut alnum

je te conseille d'utiliser [:alnum:]. Cela peut paraître anodin dans ton cas mais pour de longues expressions régulières, cela rend le code beaucoup plus lisible.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2007, 17h02   #3
Membre régulier
 
Avatar de B.Moncef
 
Étudiant
Inscription : août 2007
Messages : 75
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 75
Points : 83
Points : 83
Pourquoi preg_match_all dans ce cas ? un simple preg_match aurait suffit.

Code :
1
2
3
4
5
6
7
8
9
10
function mols_verif_alphanum($content)
{
     $return = TRUE;
     if (!preg_match("/^([a-zA-Z0-9 ]+)$/i", $content)) 
     {
	  $return = FALSE;
     }
 
     return $return;	
}
B.Moncef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2007, 19h48   #4
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
pour que ca me retourne les caracteres non désirés
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 09h15   #5
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
essaye de détailler ce que tu veux, ce que tu as stp.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 08h57   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Il faut effectivement un simple preg_match(), mais ce qui te manquait était le signe "+" proposé par B.Moncef.

Pour ta regex, il est inutile de préciser à la fois "a-z" et "A-Z" si tu mets le modificateur "i"

@David : Note la présence d'un espace dans sa regex, ce qui invalide ta proposition de classe posix :/
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 09h58   #7
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
Par défaut ??

je ne comprend pas !!

si je met

Code :
1
2
3
4
5
6
7
8
9
10
11
 
function mols_verif_alnum($content)
{
 
     if (!preg_match("/^([[:alnum:]]+)$/i", $content, $trouve)) 
     {
     $return = TRUE;
     }
 
     return array($return, $trouve[0]);	
}
et que derriere je traite de cette facon

Code :
1
2
3
4
5
6
7
8
9
 
		$erreur_pseudo_maccess = mols_verif_alnum($pseudo_maccess);
		$erreur = $erreur_pseudo_maccess[0];
 
 
	 if($erreur)
		{
		  echo $erreur_pseudo_maccess[1];
		}
Pourquoi ca ne fonctionne pas ??? j'ai loupé quoi ???
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 10h05   #8
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
tu veux verifier que ta chaine est alphanumérique et si elle ne l'est pas, tu veux retourner la liste des caractères qui ne correspondent pas ? c'est ça ?
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 10h10   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Je pense que tes tests sont trop complexes. Tu as deux négations, essaie de tester simplement :
Code :
if (preg_match("/([[:alnum:]]+)$/", $content, $trouve))
Attention, cette expression n'accepte pas les espaces contrairement à la première proposée, et le modificateur "i" ne sert à rien si tu utilises uniquement une classe posix. Pour que ce modificateur soit utile, il faut avoir une classe [a-z] par exemple.

J'ai publié un article sur les regexes, si tu ne te sens pas au point
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 10h17   #10
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut je serai plus précis

Citation:
Envoyé par Yogui Voir le message
@David : Note la présence d'un espace dans sa regex, ce qui invalide ta proposition de classe posix :/
Ouais, j'aurais du réécrire la chaîne complète au lieu de simplement préciser le [:alnum:]. Sorry.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 10h38   #11
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
ca ne fonctione pas je testerai plus tard

Merci pour votre aide Merci beaucoup
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 13h22   #12
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
Par défaut Pourquoi ??

si je met :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 function mols_verif_alnum($Mols_Content)
	{
     if (preg_match_all("/([^a-z0-9 ])/i", $Mols_Content,$trouve)) 
		 {
			$return = TRUE;
		 }	
	 else
		 {
		  $return = $Mols_Content;
		 }
	 return $return;
	}
puis

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	function Moles_Verif_Form($type, $oblige, $Mols_Content)
		{
		 if(!empty($Mols_Content) or ($oblige == 1))
			{
			 if($type == 'alpha')
				{
				 $Mols_Content_Verif = mols_verif_alpha(removeHack($Mols_Content));
				}
			 elseif($type == 'alnnum')
				{
				 $Mols_Content_Verif = mols_verif_alnum(removeHack($Mols_Content));				
				}	
			 elseif($type == 'num')
				{
				 $Mols_Content_Verif = mols_verif_num(removeHack($Mols_Content));				 
				}
			 elseif($type == 'mail')
				{
				 $Mols_Content_Verif = mols_verif_mail(removeHack($Mols_Content));				 
				}
			 elseif($type == 'url')
				{
				 $Mols_Content_Verif = mols_verif_url(removeHack($Mols_Content));				 
				}		
			}
		 else
			{
			 $Mols_Content_Verif = removeHack($Mols_Content);				 
			}
 
		 return $Mols_Content_Verif;
		}
et que je traite comme ca :

Code :
1
2
3
4
5
6
7
8
9
10
 
		$verif_pseudo_maccess = Moles_Verif_Form('alnum', 1, $pseudo_maccess);
		$erreur .= $verif_pseudo_maccess;
 
	 if($erreur == true)
		{
                   echo $erreur;
                 }
          else
                 {   mon action en bdd }
Ca ne me retounre ni true ni la valeur ??
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 14h50   #13
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Je ne comprend meme pas ce que tu veux. Selon TA regex, tu cherches à ce que ce ne soit PAS alphanum et tout le monde te donne des regex pour tester justement l'inverse.

Explique ce que tu veux sinon on t'aidera à coté de la plaque...
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 15h45   #14
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
Par défaut ce que je veux

c'est faire un systeme de verification de formulaire utilisable
sur:
  • l'inscription de mes membres,
  • la modification des membres,
  • les commentaires
  • etc ....

Donc ce que je pensais faire :
  • Une fonction qui accepte uniquement les lettres
  • Une fonction alphanumerique
  • Une fonction numerique
  • Une fonction de verification de d'adresse mail
  • Une fonction de verification d'url

une fois creer je fait appel a une fonction principale

verif_form(le type de verif, si le champs est obligatoire, mon contenu)

si la fonction est appeler je teste la variable et qu'elle ne soit pas vide

et
si il y'a une erreur je revoi true

sinon je renvoi la valeur de ma variable

ceci ete dans une page verif_form.php

et dans admettons dans ma page de verif d'inscription

je ferai

monchamps obligatoire ou a verifier = verif_form de mon champs
erreurchamp = monchamps obligatoire ou a verifier

si erreur champs == true

alors di moi l'erreur

sinon

tu m'insere ca en bdd


Tout en sachan qu'il peut y avoir des champs vide mais que si ils sont rempli

alors je verifi si il est alphan numeric ou numeric

voila a peut pres ce que je veux que ca fasse

voici ce que j'ai deja realisé


verif_form.php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
 function mols_verif_alpha($Mols_Content)
	{
	 if (!ereg("/^([a-z ]+)$/i", $Mols_Content)) 
		 {
		  $return = true;
		 }
	 return $return;
	}		
 
 function mols_verif_alnum($Mols_Content)
	{
     if (preg_match("/([^a-z0-9 ])/i", $Mols_Content)) 
		 {
		  $return = true;
		 }
	 return $return;
	}
 
 function mols_verif_num($Mols_Content)
	{
     if (preg_match("/([^0-9 ])/i", $Mols_Content)) 
		 {
		  $return = true;
		 }
	 return $return;
	}	
 
 
 function mols_verif_mail($Mols_Content)
	{
	 if(eregi("^[_\.0-9a-z-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $Mols_Content))
		 {
		  $return = true;
		 }	
	 return $return;
	}
 
 function mols_verif_url($Mols_Content)
	{
	 if(!eregi("^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.([_a-zA-Z0-9]))", $Mols_Content))
		{
		 return false;
		}
	 else
		{
		 $Mols_file = @fopen($Mols_Content, 'r'); 
	 	 if ($file) 
			{
			 return ($Mols_Content);
			} 
		 else 
			{
			 return false;
			}  
		}
	}	
 
	function Moles_Verif_Form($type, $oblige, $Mols_Content)
		{
		 if(!empty($Mols_Content) or ($oblige == 1))
			{
			 if($type == 'alpha')
				{
				 $Mols_Content_Verif = mols_verif_alpha($Mols_Content);
				}
			 elseif($type == 'alnnum')
				{
				 $Mols_Content_Verif = mols_verif_alnum($Mols_Content);				
				}	
			 elseif($type == 'num')
				{
				 $Mols_Content_Verif = mols_verif_num($Mols_Content);				 
				}
			 elseif($type == 'mail')
				{
				 $Mols_Content_Verif = mols_verif_mail($Mols_Content);				 
				}
			 elseif($type == 'url')
				{
				 $Mols_Content_Verif = mols_verif_url($Mols_Content);				 
				}		
			}
 
		 return $Mols_Content_Verif;
		}
verif_inscription.php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
		$verif_pseudo_maccess = Moles_Verif_Form('alnum', 1, $pseudo_maccess);
		$erreur .= $verif_pseudo_maccess;
 
	 if($erreur == 1)
		{
                   echo $erreur;
     		}
	 else
		{
                   ajout dans ma bdd
     		}

Merci par avance
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 21h00   #15
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
 
function verif_form($regex, $forced, $content, $error=NULL)
{
	// Par défaut la valeur de retour est le contenu lui même
	$return = $content;
 
	// On va essayer plusieurs tests.
	try
	{
		if( empty($content) && $forced ) throw new Exception('Variable Vide');
 
		if( ! preg_match($regex, $content) ) throw new Exception('Ne correspond pas');
	}
	// Si on capture une erreur
	catch(Exception $e)
	{
		// La valeur de retour sera alors TRUE
		$return = TRUE;
		$error = $e->message;
	}
 
	return $return;
}
 
// Uniquement des lettres
verif_form('#^[a-z]+$#i', TRUE, $val0);
 
// Alphanumérique
verif_form('#^[a-z0-9]+$#i', TRUE, $val1);
 
// Numérique
verif_form('#^[0-9]+$#i', TRUE, $val2);
 
// Adresse email
verif_form('#^[a-z0-9_.-]+@[a-z0-9_.-]+\.[a-z]{2,4}$#i', TRUE, $val3);
 
// URL
verif_form('#^(?:https?://|ftp://)?[a-z0-9_.-]+\.[a-z]{2,4}(?:/[a-z%_.~/-]+)?(?:[a-z0-9~_%-.]+)?$#i', TRUE, $val4);
 
?>
Sa ne correspond pas à ce que tu cherches ?
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 22h25   #16
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
Par défaut ok

ca a l'air bien

mais deja j'ai une petite erreur avec le is_empti
Fatal error: Call to undefined function is_empty() in
et si je fait

tout en sachant que

Code :
1
2
3
4
5
6
7
8
9
10
$pseudo_maccess = "johan";
 
et qu'il apparait bien lors du echo
 
	  echo $pseudo_maccess; //johan
 
	   $Verif_pseudo_maccess = verif_form('#^[a-z0-9]+$#i', TRUE, $pseudo_maccess);
	   echo $Verif_pseudo_maccess;
 
ca me retourne : echo $pseudo_maccess >> johan et echo $Verif_pseudo_maccess >> 1
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 08h52   #17
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
oui lol pardon c'est le nom de la fonction qui est pas bon ^^
c'(est pas is_empty( mais empty( lol
Désolé habitude d'utiliser ce nom pour une de mes fonctions qui test isset et empty d'ou le is_empty :p
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 09h55   #18
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
par contre ca me retroune tjs 1 si ta vu l'exemple dans la source
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 11h28   #19
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Prend la fonction je l'ai modifiée dans le message précédent.

Et test ce code là... Il devrait te donner ce qui ne va pas...
Code :
1
2
3
4
5
6
7
8
9
$pseudo_maccess = "johan";
 
var_dump($pseudo_maccess); //johan
 
$Verif_pseudo_maccess = verif_form('#^[a-z0-9]+$#i', TRUE, $pseudo_maccess, $pseudo_maccess);
 
var_dump($pseudo_maccess);
 
var_dump($Verif_pseudo_maccess);
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 14h15   #20
Nouveau Membre du Club
 
Homme Johan
Inscription : décembre 2006
Messages : 131
Détails du profil
Informations personnelles :
Nom : Homme Johan
Âge : 27
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 131
Points : 32
Points : 32
Envoyer un message via MSN à Hotfirenet
je suis dsl
si je fait
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 function verif_form($regex, $forced, $content, $error=NULL)
{
	// Par défaut la valeur de retour est le contenu lui même
	$return = $content;
 
	// On va essayer plusieurs tests.
	try
	{
		if( empty($content) && $forced ) throw new Exception('Variable Vide');
 
		if( ! preg_match($regex, $content) ) throw new Exception('Ne correspond pas');
	}
	// Si on capture une erreur
	catch(Exception $e)
	{
		// La valeur de retour sera alors TRUE
		$return = TRUE;
		$error = $e->message;
	}
 
	return $return;
}
 
$pseudo_maccess = "johan*/-(";
 
$Verif_pseudo_maccess = verif_form('#^[a-z0-9 ]+$#i', TRUE, $pseudo_maccess, $pseudo_maccess);
 
$erreur = var_dump($Verif_pseudo_maccess);
 
echo $erreur;
j'obtient

Fatal error: Cannot access protected property Exception::$message

qui correspond a

$error = $e->message;

En tous cas merci vraiment merci
Hotfirenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h00.


 
 
 
 
Partenaires

Hébergement Web