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 :

Tester commande dans un champ text [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut Tester commande dans un champ text
    Bonjour,

    Je voudrai pouvoir entrer des commandes simples dans un champ text :

    traduire "mon text"
    commande 50

    Donc je voudrais utiliser les expressions régulières pour savoir quelle commande est demandée puis récupérer la variable.

    Quelle fonction est la plus appropriée ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    explode()

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    J'ai oublié de signaler que le champ text peut recevoir des recherches classiques du type "journal en ligne" par exemple.

    Je voudrais tester dans un premier temps si j'ai un requête classique ou une requête de commande d'où l'utilisation des expressions régulières.

    Merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Si la commande de base est toujours la premiere expression avant le premier espace explode est parfait.

    Après sans en savoir plus sur la façon dont tu exploites ces commandes il est difficile de t'aider.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    Salut,

    Par exemple, je voudrais différencier :

    traduire un texte

    et

    traduire "Club des professionnels de l'informatique"

    alors que les deux requêtes commencent toutes les deux par "traduire".

    Niveau php, je pense tester les conditions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ($commande == 1)
    {
         // Commande 1
    }
    elseif ($commande == 2)
    {
         // Commande 2
    }
    else
    {
         // Recherche classique
    }
    Merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 469
    Points : 525
    Points
    525
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $c=explode(" ",$machaine);
    $commande= $c[0];	
    $occurence= $c[1];
    Dans quel cas tes conditions changent ? s'il y a des guillemets ?

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    Dans quel cas tes conditions changent ? s'il y a des guillemets ?
    Oui si les guillemets sont juste après la commande et qu'il n'y a rien après les guillemets.

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Il y a plusieurs façons de faire:
    - soit tu parse ton fichier texte à grands coups d'expression régulières
    - soit tu invente une grammaire simple pour tes commandes et tu te fais un langage perso
    - soit tu utilise une astuce (voir la suite)

    Pour utiliser des regexp, utilise preg_match et preg_match_all (les fonction ereg sont dépreciées).

    Ce que je te recommande pour faire ça c'est d'utiliser un algo tout simple qui consiste à découper les lignes en fonction des espaces et d'appeller des fonctions PHP existantes, ça ressemblerait à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    function get_batch_line ($fic) {
    	static $handle = null;
    	if (!$handle) {
    		$handle = fopen($fic, 'r');
    	}
    	if ($handle && $line = fgets($handle)) {
    		return explode(' ', $line);
    	}
    	fclose($handle);
    	return false;
    }
     
    function test_function () {
      echo __FUNCTION__ . ':' . implode(' ', func_get_args());
    }
     
    while ($desc = get_batch_line('./bulk.txt')) {
      $cmd = array_shift($desc);
      if (function_exists($cmd)) {
    	call_user_func_array($cmd, $desc);
      }
      else {
    	echo "Error: $cmd not found";
      }
      echo "<br />";
    }
    Ce n'est pas bien compliqué, on obtiens successivement toutes les lignes du fichiers dans un tableau (découpage de la ligne par espaces) et on prends le premier élément comme nom de la fonction. Ensuite, on appelle cette fonction avec call_user_func_array en lui passant le reste de la ligne (donc ses paramètres) et ça tourne

    Avec ça comme bulk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    printf HELLO
    test_function a b c
    test_function 1 2 3
    Tu obtiens ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HELLO
    test_function:a b c
    test_function:1 2 3
    C'est vraiment très simple à réaliser.

    Maintenant, j'aimerais bien savoir ce que tu essaie de faire.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    soit tu parse ton fichier texte à grands coups d'expression régulières
    Je n'ai pas de fichier text, mais un champ text

    Merci pour l'explication, mais je pense que les expressions régulières sont la meilleure solution.

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Mais tu ne réponds pas à ma question: c'est pour faire quoi exactement ?

  11. #11
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Mais tu ne réponds pas à ma question: c'est pour faire quoi exactement ?
    C'est pour utiliser un champ de recherche pour entrer les commandes spéciales :

    client "Jean Hammon"
    devis 256
    facture 365

    le moteur de recherche étant également utilisé pour rechercher des produits d'un catalogue.

    etc...

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Ah je vois. Avec Ajax ce serait un poil mieux je pense.

  13. #13
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Points : 311
    Points
    311
    Par défaut
    Au final, j'ai utilisé une expression régulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (preg_match('/(?<=client)\s"([^"]*)"/si', 'client "James Bond"', $matches))
    {
    	// On recherche le client James Bond
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb de recuperation valeur dans un champ texte
    Par kikou33 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/06/2005, 11h43
  2. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44
  3. Réponses: 9
    Dernier message: 23/05/2005, 09h35
  4. Une valeur ne s'affiche pas dans un champ texte
    Par KibitO dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2005, 20h42
  5. [FLASH MX] Variable URL dans un champ texte
    Par furet92 dans le forum Flash
    Réponses: 4
    Dernier message: 07/02/2005, 14h26

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