[PHP] verifier une chaine de caractere
Fermé
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
-
31 mai 2006 à 21:50
HaoPhoenix - 12 juil. 2007 à 10:38
HaoPhoenix - 12 juil. 2007 à 10:38
A voir également:
- [PHP] verifier une chaine de caractere
- Caractère ascii - Guide
- Verifier un lien - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
19 réponses
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
1 juin 2006 à 07:10
1 juin 2006 à 07:10
j'ai essayé cette fonction mais je comprend pas bien comment ca marche
mamiemando
Messages postés
33361
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 novembre 2024
7 799
1 juin 2006 à 01:28
1 juin 2006 à 01:28
Ben c'est juste une comparaison de chaîne de caractère, non ?
uquel cas un petit coup de strcmp et c'est dans la poche :
https://www.php.net/strcmp
Bonne chance
uquel cas un petit coup de strcmp et c'est dans la poche :
https://www.php.net/strcmp
Bonne chance
mamiemando
Messages postés
33361
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 novembre 2024
7 799
1 juin 2006 à 13:45
1 juin 2006 à 13:45
Si les deux chaines sont strictement identiques, strcmp retourne 0.
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
1 juin 2006 à 14:09
1 juin 2006 à 14:09
meme si l'ordre différe ??
en meme temps j'ai une question aussi sur un probleme différent peut etre pourrais tu y repondre
dans une base SQL j'ai cette valeur
-√<input type="text" name="case1" size="5" onclick="javascript:changer_champ('case1');" onselect=\"javascript:changer_champ('case1');"></input> = -2
j'affiche ce contenu de la maniere suivante
<div align="center"><?echo $Question[$NumQuestion]?></div>
je ne sais pas si la syntaxe du contenu de la table est bonne pour etre insérer comme ca
en meme temps j'ai une question aussi sur un probleme différent peut etre pourrais tu y repondre
dans une base SQL j'ai cette valeur
-√<input type="text" name="case1" size="5" onclick="javascript:changer_champ('case1');" onselect=\"javascript:changer_champ('case1');"></input> = -2
j'affiche ce contenu de la maniere suivante
<div align="center"><?echo $Question[$NumQuestion]?></div>
je ne sais pas si la syntaxe du contenu de la table est bonne pour etre insérer comme ca
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33361
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 novembre 2024
7 799
1 juin 2006 à 14:20
1 juin 2006 à 14:20
Désolé pour le nouveau problème, ouvre un autre post, car je ne sais pas y répondre (à la base je ne fais pas de PHP ou de SQL :p)
strcmp renvoie 0 uniquement si les deux chaînes sont parfaitement identiques, c'est à dire que :
strcmp("plop","plop") == 0
strcmp("(1+x)(3+x)/2","(3+x)(1+x)/2") != 0
Bonne chance
strcmp renvoie 0 uniquement si les deux chaînes sont parfaitement identiques, c'est à dire que :
strcmp("plop","plop") == 0
strcmp("(1+x)(3+x)/2","(3+x)(1+x)/2") != 0
Bonne chance
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
1 juin 2006 à 15:00
1 juin 2006 à 15:00
ah voila donc cette fonction ne me conviens pas
si la réponse est (x+3)(x-3) je dois pouvoir aussi bien taper (x+3)(x-3) que (x-3)(x+3) étant donnée que le resultat est le meme
si la réponse est (x+3)(x-3) je dois pouvoir aussi bien taper (x+3)(x-3) que (x-3)(x+3) étant donnée que le resultat est le meme
mamiemando
Messages postés
33361
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 novembre 2024
7 799
2 juin 2006 à 01:06
2 juin 2006 à 01:06
En gros tu veux un truc qui fait du calcul formel... Ben ça je suis pas sûre que ça existe en PHP.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
2 juin 2006 à 04:24
2 juin 2006 à 04:24
Personnelement, d'abord je transformerais l'expression ")(" en ") (", sachant que pour ça il faut d'abord tranformer les espaces inutiles. Puis je séparerais les deux facteurs en fonction de l'espace qui se situe entre les deux pour mettre ces facteurs dans un tableau. A la fin on aurais ça:
Donc ça donnerais:
Voilà.
$resultat=array('(x+3)', '(x-3)' );
Donc ça donnerais:
$reponse=str_replace (' ', '', $reponse); $reponse=str_replace (')(', ' ', $reponse); $reponse=explode (' ', $response); //On vérifie qu'on a que deux expressions entre parenthèses if (sizeof ($response) == 2){ //on vérifie qu'on a nos deux expressions dans le tableau $response if (array_in('(x+3)', $reponse) && array_in('(x-3)', $response) ){ //Arrivé ici: la réponse est bonne } }
Voilà.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
2 juin 2006 à 04:35
2 juin 2006 à 04:35
Note que j'ai fait une faute au dessus. remplacer la ligne:
Par:
Et j'ai aussi mis des $response à la place de $reponse parfois....
Et ce n'est pas array_in mais in_array (grrr....)
Sinon à vrai dire c'est plus compliqué que ça, il faut prévoir que le produit peut être exprimé avec le signe * ou encore que les termes à l'intérieur des facteurs sont inversés (pire encore: cette inversion ne peut marcher que si un facteur est une addition....).
Alors ettoffons tout ça:
Et je parie qu'il y a encore des imprevus qu'on a pas prévus :-)
$reponse=str_replace (')(', ' ', $reponse);
Par:
$reponse=str_replace (')(', ') (', $reponse);
Et j'ai aussi mis des $response à la place de $reponse parfois....
Et ce n'est pas array_in mais in_array (grrr....)
Sinon à vrai dire c'est plus compliqué que ça, il faut prévoir que le produit peut être exprimé avec le signe * ou encore que les termes à l'intérieur des facteurs sont inversés (pire encore: cette inversion ne peut marcher que si un facteur est une addition....).
Alors ettoffons tout ça:
$reponse=str_replace (' ', '', $reponse); //Au cas où le produit utilise * $reponse=str_replace('*', '', $reponse); $reponse=str_replace (')(', ') ( ', $reponse); $reponse=explode (' ', $response); //On vérifie qu'on a que deux expressions dans notre tableau (nos deux facteurs) if (sizeof ($reponse) == 2){ /*on vérifie qu'on a nos deux expressions dans le tableau $response et on prvoit aussi une inversion des termes en cas d'addition */ if ( (in_array('(x+3)', $reponse) || in_array('(3+x)', $reponse) ) && in_array('(x-3)', $reponse) ){ //Arrivé ici: la réponse est bonne } }
Et je parie qu'il y a encore des imprevus qu'on a pas prévus :-)
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
2 juin 2006 à 08:24
2 juin 2006 à 08:24
ola j'ai un peu du mal a tout comprendre
bon déja pour ce qui est de la reponse saisie et de la réponse exact j'ai déja supprimé les espaces
j'arrive a peu près a saisir le code mais ici il ne s'applique que pour (x+3)(x-3) et j'ai des centaines de questions a verifié comme ca
par contre j'ai du mal a comprendre ca :
$reponse=str_replace (')(', ') ( ', $reponse);
$reponse=explode (' ', $response);
merci pour ton aide
bon déja pour ce qui est de la reponse saisie et de la réponse exact j'ai déja supprimé les espaces
j'arrive a peu près a saisir le code mais ici il ne s'applique que pour (x+3)(x-3) et j'ai des centaines de questions a verifié comme ca
par contre j'ai du mal a comprendre ca :
$reponse=str_replace (')(', ') ( ', $reponse);
$reponse=explode (' ', $response);
merci pour ton aide
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
2 juin 2006 à 14:31
2 juin 2006 à 14:31
En fait je supprime d'abord tous les espaces.
Et en faisant:
je remplace toutes les expressions )( par ) ( c'est à dire que je rajoute un espace entre chaque expressions de parenthèses.
'(x-3)(x+3)' deviendra donc '(x-3) (x+3)'
On sait maintenant qu'il n'existe un espace que entre chaque expression encerclée de parenthèses. Chaque facteur est séparé par un espace. On peut donc utiliser l'espace comme séparateur de chaque facteur.
explode permet de découper une chaine dans un tableau, en utilisant comme séparateur ce qu'on veut.
Donc en faisant $reponse=explode (' ', $response)
$reponse sera ensuite un tableau comme ceci:
array( '(x-3)', '(x+3)' )
N'empêche que ça pose des problèmes si tu as des centaines de questions. Dés lors qu'il y aura des réponses avec des parenthèses dans des parenthèses, ça va poser problème.
Et en faisant:
$reponse=str_replace (')(', ') ( ', $reponse);
je remplace toutes les expressions )( par ) ( c'est à dire que je rajoute un espace entre chaque expressions de parenthèses.
'(x-3)(x+3)' deviendra donc '(x-3) (x+3)'
On sait maintenant qu'il n'existe un espace que entre chaque expression encerclée de parenthèses. Chaque facteur est séparé par un espace. On peut donc utiliser l'espace comme séparateur de chaque facteur.
explode permet de découper une chaine dans un tableau, en utilisant comme séparateur ce qu'on veut.
Donc en faisant $reponse=explode (' ', $response)
$reponse sera ensuite un tableau comme ceci:
array( '(x-3)', '(x+3)' )
N'empêche que ça pose des problèmes si tu as des centaines de questions. Dés lors qu'il y aura des réponses avec des parenthèses dans des parenthèses, ça va poser problème.
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
2 juin 2006 à 15:50
2 juin 2006 à 15:50
ok merci pour ces explications.
j'ai fini par trouver une alternative plutot lourde c'est que dans la base j'ai la reponse mais aussi des alternatives a la reponse
ca sera plus simple pour moi
j'ai fini par trouver une alternative plutot lourde c'est que dans la base j'ai la reponse mais aussi des alternatives a la reponse
ca sera plus simple pour moi
mamiemando
Messages postés
33361
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 novembre 2024
7 799
2 juin 2006 à 18:24
2 juin 2006 à 18:24
Ouais mais il y a aussi l'addition qui, est commutative. Et puis même, imagine tu dois comparer (x/y)*(z/t) et (x*z)/(y*t)... Bref je veux pas être défaitiste mais à mon avis c'est chaud...
Bonne chance
Bonne chance
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
2 juin 2006 à 18:31
2 juin 2006 à 18:31
Voui, prévoir toutes les solutions ça me parait un peu chaud....
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
2 juin 2006 à 19:25
2 juin 2006 à 19:25
en fait on va reduire les nombres de réponses possibles en indiquant une démarche a suivre pour l'eleve
mamiemando
Messages postés
33361
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 novembre 2024
7 799
3 juin 2006 à 03:04
3 juin 2006 à 03:04
Et sinon pourquçoi ne pas faire un QCM, un peu comme dans les concours "kangourou" qu'on avait dans notre jeunesse ? Si les réponses proposées paraissent cohérente l'élève sera bien obligé de réfléchir pour pouvoir répondre correctement...
Bonne chance
Bonne chance
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
3 juin 2006 à 10:24
3 juin 2006 à 10:24
merci pour ta réponse mais la personne pour qui je fais ce site cherche surtout a ce que l'eleve arrive a la solution par lui meme et non qu'on lui propose de choisir.
merci encore pour l'aide apporter
merci encore pour l'aide apporter
Idée : Faire le calcul en remplaçant les valeur de x, y ou z par un entier ! , Comparer le résultat de l'opération avec celui de la base !
$reponse=str_replace (' ', '', $reponse);
//Au cas où le produit utilise *
$reponse=str_replace('*', '', $reponse);
$reponse=str_replace (')(', ') ( ', $reponse);
$reponse=explode (' ', $response);
$x = 3;
$y = 23; (ex.)
$resultat = eval($reponse[0]*$reponse[i]*...) à comparer avec la base!
Combien y a t'il de chance de retomber plusieurs fois sur le même résultat ?
$reponse=str_replace (' ', '', $reponse);
//Au cas où le produit utilise *
$reponse=str_replace('*', '', $reponse);
$reponse=str_replace (')(', ') ( ', $reponse);
$reponse=explode (' ', $response);
$x = 3;
$y = 23; (ex.)
$resultat = eval($reponse[0]*$reponse[i]*...) à comparer avec la base!
Combien y a t'il de chance de retomber plusieurs fois sur le même résultat ?