Page 1 sur 1

Vérifier qu'une chaine de caractère ne commence pas par

Posté : 09 nov. 2007, 10:50
par béka
Bonjour tout le monde, je sais c'est nul de vous embêter alors que c'est bientôt le weekend...

Je voulais savoir comment faire pour vérifier qu'une chaine de caractère ne commence pas par un ou plusieurs espaces.

En efffet, je travail avec des ficheirs xml et php4, mon fichier est indenté et lorsque je récupère le contenu de mes noeuds, il considère l'indentation comme des caractères. Je voudrais éviter ceci. POur cela, je pensais vérifier que le contenu de mon noeud ne commençait pas par un ou plusieurs espaces.
De ce fait, j'ai fait ainsi
if ( ereg("[^ +]", $value->get_content() ) )
{
//traitement
}
mais ça ne amrche pas, il ne vérifie pas que mon contenu contient ou pas des espaces au début de la chaine

Pouvez-vous m'aider ?

Posté : 09 nov. 2007, 11:11
par Ryle
Le caractère ^ a deux fonctions, l'interdiction (que tu utilises) mais aussi spécifié que le pattern correspond bien au début de la chaine (que tu n'utilises pas :))

Sinon juste une idée simple comme ça, si tu sais tester qu'une chaine commence par un espace, alors tu peux facilement vérifier que ce test est faux ;)

Posté : 09 nov. 2007, 11:16
par béka
:wink: effectivement avec un ! devant, c'est mieux...

alors ici ma fonction ereg spécifiait quoi et vérifiait quoi ?

mais non car ici, je veux vérifier que ma chaine ne contient pas que 1 ou plusieurs espaces. Car je me suis rendu compte que si elle commence par un espace mais contient du texte après, elle n'est pas considérée. Comment faire alors pour palier à ceci ?

Posté : 09 nov. 2007, 11:25
par Ryle
Les crochets définissent une classe, le ^ à l'intérieur d'une classe est une négation de ce qui suit. Tu interdisais donc la présence d'un ou plusieurs espace à l'intérieur de ta chaine, que ce soit au début, à la fin ou au milieu de celle-ci :)

Pour rester dans ton masque, ceci devrait fonctionner également :
ereg("^[^ +]", $value->get_content() )
Maintenant, on va à mon avis beaucoup plus vite pour comprendre ce qui est fait lorsque c'est écrit ainsi ;) :
!ereg("^ ", $value->get_content() )
Quoi qu'il en soit, un p'tit commentaire à côté pour expliquer le test ne coute rien et fait gagner bien plus de temps encore :)

Edit : Oops, au temps pour moi, j'avions pas bien compris la question... le plus simple pour vérifier que ta chaine ne contient pas que des espaces dans ce cas est sans doute de faire un trim() et de vérifier que le résultat n'est pas vide :)
Mais tu peux également définir un masque qui commence (^) par un ou plusieurs espaces ([ +]) et qui va jusqu'à la fin de la chaine ($) :)

Posté : 09 nov. 2007, 11:27
par béka
Tu interdisais donc la présence d'un ou plusieurs espace à l'intérieur de ta chaine, que ce soit au début, à la fin ou au milieu de celle-ci :)
C'est bien ce que je voulais faire pourtant le traitement à l'intérieur de ma condition if était considéré. Pourquoi ?
Mais ce que je voudrais faire c'est interdire qu'un contenu ne soit que des espaces. Tu vois ?

Posté : 09 nov. 2007, 11:28
par Ryle
Réponse croisée, j'ai édité mon message précédent ;)

Posté : 09 nov. 2007, 11:39
par béka
Donc en faisant comme ça :
if( ereg("^[ +]$", $value->get_content() ) ) //on vérifie que le contenu du noeud ne soit pas que des espaces et ne correspondent alors pas à une indentation
            {
logiquement j'emp^che d'entrer dans la boucle si le contenu de mon noeud est qu'une chaine d'espaces et rien d'autre.

Je ne pense pas que la fonction trim() soit appropriée ici pour ce que je veux faire.

Posté : 09 nov. 2007, 11:52
par Ryle
Il te manque la négation, mais c'est ça :)

En revanche, d'après ton commentaire et la référence à l'indentation, on peut supposer que ta chaine puisse être composée non pas d'espace mais de tabulation.. il serait donc peut être plus simple de contrôle la classe [:blank:] qui regroupe espace et tabulation :

Code : Tout sélectionner

"^[:blank:]+$"
au cas où... http://www.phpfrance.com/tutoriaux/inde ... regulieres

Posté : 09 nov. 2007, 11:56
par béka
ok merci pour l'aide. Maintenant, je vais m'occuper de supprimer les esapces avant une chaine de caractère. Je vais me servir de tout ce qu'on a dit avec ereg() et trim()