preg_match et caractères spéciaux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : preg_match et caractères spéciaux

par Expreg » 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]

par phi3001 » 06 avr. 2007, 12:56

Tout marche nickel

Merci beaucoup de votre aide precieuse

par Ryle » 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.

par Invité » 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>

par Expreg » 06 avr. 2007, 10:18

Un seul espace ou tiret ?
Comme ça :
<?php
if (preg_match('`^[[:alpha:]]+[ -]?[[:alpha:]+$`', $nom)) 
?>

par Ryle » 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

par phi3001 » 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

par tanky » 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/

preg_match et caractères spéciaux

par phi3001 » 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