Page 1 sur 1

preg_match et caractères spéciaux

Posté : 06 avr. 2007, 08:43
par phi3001
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

Posté : 06 avr. 2007, 09:01
par tanky
tuto: http://www.phpfrance.com/tutoriaux/inde ... regulieres

l'expression que tu cherche devrait ressembler à ça: /jean-{0,3}pascal/

Posté : 06 avr. 2007, 09:19
par phi3001
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

Posté : 06 avr. 2007, 10:17
par Ryle
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

Posté : 06 avr. 2007, 10:18
par Expreg
Un seul espace ou tiret ?
Comme ça :
<?php
if (preg_match('`^[[:alpha:]]+[ -]?[[:alpha:]+$`', $nom)) 
?>

Posté : 06 avr. 2007, 11:53
par Invité
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>

Posté : 06 avr. 2007, 12:16
par Ryle
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.

Posté : 06 avr. 2007, 12:56
par phi3001
Tout marche nickel

Merci beaucoup de votre aide precieuse

Posté : 06 avr. 2007, 13:13
par Expreg
ce que vous me donnez comme code, me retourne une erreur
Aaaaaah scuse, j'ai, en effet, oublié un ]
'`^[[:alpha:]]+[ -]?[[:alpha:]]+$`'[/php]