preg_match et caractères spéciaux

Eléphanteau du PHP | 37 Messages

06 avr. 2007, 08:43

bonjour,

comment autoriser un caractère specifique du genre "-" ou espace et en autoriser une quantité limité.

en gros j'aimerai accepté :

jeanpascal
jean-pascal
jean pascal

merci d'avance

Eléphant du PHP | 100 Messages

06 avr. 2007, 09:01

tuto: http://www.phpfrance.com/tutoriaux/inde ... regulieres

l'expression que tu cherche devrait ressembler à ça: /jean-{0,3}pascal/
Script gratuit de videothèque: PhpMesFilms
sur http://phpmesfilms.dyndns.org/

Eléphanteau du PHP | 37 Messages

06 avr. 2007, 09:19

en fait j'aimerai rajouter la possibilité pour l'utilisateur d'ajouter eventuellement un tiret (-) ou un espace.

voila mon code


if (preg_match('#[^a-zA-Z$]#', $nom))


merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 avr. 2007, 10:17

Quelques p'tites erreurs dans ton expression :
- le ^ quand il est plassé dans une classe (donc entre []) signifie "sauf". Il faut le mettre au début de ton expression pour qu'il signifie "commençant par"
- de même le $ doit être placé à la fin pour avoir la valeur "qui se termine par". Si tu veux le caractère il suffit de le protéger d'un antislash.
- si tu veux autoriser les espaces et les tirets dans ta classe, il suffit de les y inclure. Attention toutefois, le tiret doit être le tout dernier élément de ta classe pour qu'il ne soit pas interprété comme un interval :
[a-z] <=> de "a" à "z"
[az-] <=> "a" ou "z" ou "-"

HTH
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 170 Messages

06 avr. 2007, 10:18

Un seul espace ou tiret ?
Comme ça :
<?php
if (preg_match('`^[[:alpha:]]+[ -]?[[:alpha:]+$`', $nom)) 
?>
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Invité
Invité n'ayant pas de compte PHPfrance

06 avr. 2007, 11:53

ce que vous me donnez comme code, me retourne une erreur


Warning: Compilation failed: missing terminating ] for character class at offset 30 in d:\program files\easyphp1-8\www\site dreamweaver\valider.php on line 13
recommencer


voici mon code complet
<p><?php 
 $nom=$_POST['champnom'];

if (preg_match('`^[[:alpha:]]+[ -]?[[:alpha:]+$`', $nom))  
{
echo "bravo";
}
else
{
echo "recommencer";
}
?></p>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 avr. 2007, 12:16

Comme te l'indique le message d'erreur, il manque un " ] " quelque part dans ta classe... je suis certain qu'en comptant les crochets et avec un peu de logique tu devrais pouvoir rectifier tout seul ce petit oubli dans le code ci dessus :)

La règle donnée par expreg est la suivante : Une chaine commençant par au moins un caractère alphabétique, suivi éventuellement d'un espace ou trait d'union, terminée par au moins un caractère alphabétique.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

06 avr. 2007, 12:56

Tout marche nickel

Merci beaucoup de votre aide precieuse

Eléphant du PHP | 170 Messages

06 avr. 2007, 13:13

ce que vous me donnez comme code, me retourne une erreur
Aaaaaah scuse, j'ai, en effet, oublié un ]
'`^[[:alpha:]]+[ -]?[[:alpha:]]+$`'[/php]
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends