IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Détecter la caractère NULL


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Par défaut Détecter la caractère NULL
    bonsoir,

    premiers pas avec les regex, je bute sur la detection du caractere NULL dans une chaine (il y a d'autres chaines du meme format à la suite mais pour le moment, je teste uniquement sur la premiere chaine)

    voici la chaine (provient d'un email), je la copie-colle ds un TEXTAREA
    [Event "FICS rated standard game"]

    - j'enleve les guillemets (str_replace)
    - j'enleve le retour chariot
    - je cree un regex qui doit detecter la seule presence de:
    - lettres (majuscules, minuscules)
    - le caractere "espace"
    - le [
    - le ]
    - le caractere NULL


    Voici la condition avec le regex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if(!preg_match_all("#[a-zA-Z\\040\\[\\]]#", $tab_partie_02[0][$b], $test)) {
    	if(isset($erreur_tags) || !empty($erreur_tags)) {
    		$erreur_tags.= "<br>";
    		$erreur_tags.= "<strong>";
    		$erreur_tags.= "Presence de caractere(s) inutile(s) dans le TAG ".(1).", caractere ".($b+ 1).": ".ord($tab_partie_02[0][$b]);
    		$erreur_tags.= "</strong>";
    	}
    	else {
    		$erreur_tags= "<strong>";
    		$erreur_tags.= "Presence de caractere(s) inutile(s) dans le TAG ".(1).", caractere ".($b+ 1).": ".ord($tab_partie_02[0][$b]);
    		$erreur_tags.= "</strong>";
    	}
    }
    dans ce regex, je ne sais pas definir la recherche de NULL.
    le: ord($tab_partie_02[0][$b]
    affiche
    Presence de caractere(s) inutile(s) dans le TAG 1, caractere 33: 0
    c'est la valeur ASCII decimale du caractere NULL

    j'ai bien essaye
    \\000
    \000
    \\x00
    \x00
    sans doute qques autres aussi.

    Aucun succes.
    j'essaye alors de detecter le NULL, grace a ord(), et de faire un str_replace mais cela ne fonctionne pas non plus.

    Si vous avez l'explication s'il vous plait.

    Merci
    areuh

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par areuh_fr Voir le message
    voici la chaine (provient d'un email)
    Salut,

    Tu peux nous coller le contenu de cette fameuse chaîne ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,



    Ta RE est [a-zA-Z\\040\\[\\]]

    La volonté d’attraper la valeur NULL comme tu veux le faire est une drôle d’idée à mon avis.

    D’après ce que j’ai compris, NULL est une valeur “solitaire“ : NULL ne peut pas partager une variable avec quoi que ce soit d’autre. Même une variable $ch à laquelle on a assigné une chaîne vide $ch = '' n’a pas la valeur NULL.

    Donc je pense (j’espère) que ton idée avec ta RE, c’est de pouvoir détecter

    - soit une valeur non NULL d’une variable de type chaine; dans ce cas, ce seront les caractères [a-zA-Z[\\]] qui seront actifs pour la recherche

    - soit la valeur NULL toute seule, comme si la RE était \\040\\




    En tant que non spécialiste de PHP, je me fais deux réflexions:


    - la valeur NULL est elle représentable par un chaîne de caractères litérale ? la chaîne ’\040\’ est elle cette chaîne litérale ? à quoi correspond la succession de chiffres 040 ? ça ressemble à une valeur d’octet. La valeur NULL a-t-elle donc une certaine valeur d’octet ? C’est bien obscur pour moi.


    - le principe me semble tordu a la base.
    Pourquoi ne pas chercher indépandamment si la variable a la valeur NULL ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!$tab_partie_02[0][$b]=NULL) and (!preg_match_all("#[a-zA-Z[\\]]#", $tab_partie_02[0][$b], $test))
    cette ligne est sans doute mal écrite, mais c’est pour donner l’idée.




    Cependant, si NULL peut vraiment être représentée par une chaîne litérale de caractères ’\040\’ et que tu veuilles vraiment faire participer celle-ci à une RE, je ne vois pas comment la mettre au sein d’une classe entre crochets car il ne me semble pas possible de faire considérer au sein d’une classe que 7 caractères successifs \\040\\ symbolisent un seul caractère.
    Je veux dire qu’en dehors d’une classe on pourrait mettre entre parenthèses (?:\\040\\) , mais au sein d’un classe je ne vois pas comment c’est possible


    Donc il faut écrire à mon avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!preg_match_all("#\\040\\|[a-zA-Z[\\]]*#", $tab_partie_02[0][$b], $test))

    Soit dit en passant, remarquer l’étoile * que j’ai ajoutée

Discussions similaires

  1. [C#]Détecter certain caractère dans un string
    Par grimsk dans le forum Windows Forms
    Réponses: 2
    Dernier message: 31/08/2006, 15h52
  2. détecter un caractère dans une chaine
    Par boss_gama dans le forum ASP
    Réponses: 4
    Dernier message: 31/08/2006, 09h46
  3. Suppresion d'un caractère NULL en début de chaine
    Par GingGing dans le forum Delphi
    Réponses: 5
    Dernier message: 10/08/2006, 10h06
  4. Identification d'une chaine de caractère null
    Par jacques70 dans le forum Langage
    Réponses: 9
    Dernier message: 11/05/2006, 18h14
  5. Réponses: 3
    Dernier message: 14/03/2006, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo