[PHP] Interdire des caracteres dans 1 chaine

Fermé
Nico - 1 sept. 2006 à 10:30
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 - 1 sept. 2006 à 20:22
Salut à tous, j'ai besoin de votre aide :

je récupere une chaine d'un post, et je souhaite envoyer un message d'erreur si cette chaine contient des caracteres differents de : 0 1 2 3 4 5 6 7 8 9 ( ) + - / *

Comment faire ? dois verifier chaque caractere de ma chaine les 1 apres les autres et voir s'ils sont bien dans la liste,
ou y a t-il une solution plus simple et propre ?

merci à vous.

2 réponses

teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
1 sept. 2006 à 11:11
Salut

Cherche regex, ou "expression reguliere" si tu es résolument francophone...
0
Merci pour ta reponse Teebo,

mais en regardant ce que fait ereg(), je ne pense pas qu'elle soit adapté à ce que je veux faire.
En effet, elle permet de vérifier si une chaine est présente dans une autre. Donc, pour mon cas, il faudrait que j'autilise ereg() en recherchant tous les caractères que je souhaite interdire (#, a, b, c, d.... ) soit un nombre énorme ... et c'est donc ingérable...

non ?
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
1 sept. 2006 à 12:56
C'est l'intérêt de regex justement:

[^0-9()+-/*]

Bon je suis plus sûr, il y a des chances que ça soit
[^0-9\(\)\+\-/\*]



0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011
1 sept. 2006 à 14:28
Salut,

[^0-9()+-/*]

Pour qu'un tiret soit inclut dans une regex en tant que caractère il faut le positionner au début, ou à la fin ou il faut l'antislasher et ça puisque dans une classe de caractère le tiret signifie un intervalle.

En revanche dans la 2ème regex tu as bien utilisé \- ;)

On pourrra simplifier un peu [^0-9\(\)\+\-/\*]
[^-\d\(\)+*]
lami20j

P.S. Pour le + et * pas besoin d'antislasher à l'intérieur d'une classe de caractère, pour les paranthèses je ne suis pas sûr, il faut tester, comme ça on evite d'avoir taper des caractères qu'on n'as pas besoin
0
Nico > teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011
1 sept. 2006 à 14:51
Super,
j'utilise l'expression "[^0-9()+-/*]" est ça fait ce que je veux.
Merci à tous !!!! et A+
0
Bonjour !

Et désolé si je suis un peu hors sujet, mais vu qu'une réponse a été apportée, je me permets ^^'
Tout ça pour dire, que je ne pouvais pas laisser passer ça : quand on est "résolument francophone", on ne dit pas "expression régulière", qui est une mauvaise traduction de "regular expression", mais "expression rationnelle" !!

Voilà, désolé pour la disgression...

Xavier
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
1 sept. 2006 à 18:41
Bonjour Xavier,

désolé pour la disgression...

Rien de grave, en revanche ça c'est grave

que je ne pouvais pas laisser passer ça : quand on est "résolument francophone", on ne dit pas "expression régulière", qui est une mauvaise traduction de "regular expression", mais "expression rationnelle" !!


Moi non plus je ne pouvais pas laisser passer ça ;)


Et pourquoi c'est grave? Puisque on est dans le monde d'OpenSource, etc... et il y a toujours plusieurs points de vue, et pour toute chose il y a des adepts pour et contre.

Donc ce que tu dis c'est vrai mais pas pour tout le monde (par exemple pour Laurent Dami, celui qui a traduit l'execellent livre - on peut dire la Bible, Maitrîse des Expressions Régulières de Jeffrey E.F. Friedl

Je cite un sous chapitre entier pour ça :

Expressions régulières ou rationnelles?

"En vertu des principes énoncés plus haut, j'ai préféré régulières à rationnelles. Je suis conscient que depuis plusieurs dizaines d'années toute école française a utilisé le terme rationnelles, et que certains défendent aujourd'hui encore avec vigueur cette traduction, comme une sorte d'étendard de la tradition rationnelle française contre l'imperialisme anglophone. Cependant les expressions en question n'ont pas grand-chose à voir avec la raison!

Il est vrai que d'un point de vue mathématique elles ont une certaine parenté avec les nombres que l'on nomme rationnels, qui se traduisent également par rational numbers en anglais. Dans cette logique-là, il aurait peut-être fallu effectivement parler de rational expressions...mais la traduction anglophone n'en a pas voulu ainsi, préférant mettre en avant l'aspect pratique (expressions gouvernées par des règles) plutôt que la cohérence mathématique. Les deux positions sont en principe défendables, mais aujourd'hui la seconde a clairement le dessus: une recherche dans les principaux moteurs d'indexation WEB montre que même dans le monde francophone les pages contenant expressions régulières sont quatre fois plus nombreuses que celles contenant expressions rationnelles.

Ainsi, pour éviter de prendre le lecteur en otage dans des querelles d'école, et pour lui éviter d'inutiles confusions lorsqu'il lira des manuels ou des magazines anglophones, j'ai privilégié le terme régulières."

Par Jeffrey E.F. Friedl - Traduction par Laurent Dami - Edition O'Reilly - 2003


Google

Résultats 1 - 10 sur un total d'environ 3 730 000 pour expressions régulières

et

Résultats 1 - 10 sur un total d'environ 305 000 pour expressions rationnelles.

lami20j
0