expressions régulières : contrôle du pseudo

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 : expressions régulières : contrôle du pseudo

Re: expressions régulières : contrôle du pseudo

par Dr@ke » 19 oct. 2009, 15:48

Je pense qu'il faut jouer avec l'encodage, de mémoire il me semble que les fonctions preg_* ne supportent que l'utf8.
Ah bon, depuis quand? #-o

Kaoteknik regarde ici (pour le déroulement):
php-debutant/expressions-regulieres-pre ... 50215.html

Et mon dernier post à ce sujet:
Bon en fait j'ai trouvé, cela n'a rien à voir avec l'encodage mais avec le setlocale().
A la différence près que pour l'UTF-8 faut aussi utiliser l'option \u

Avec l'encodage ISO:
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
setlocale(LC_ALL,'fr_FR.ISO8859-1');
$chaine = 'abcé';
if (preg_match ('#^[[:alnum:]_-]{4,32}$#', $chaine)) {
    echo 'Preg_match: oui <br/>';
}
echo $chaine;
?>
Avec l'encodage UTF-8:
<?php
header('Content-Type: text/html; charset=UTF-8');
setlocale(LC_ALL,'fr_FR');
$chaine = 'abcé';
if (preg_match ('#^[[:alnum:]_-]{4,32}$#u', $chaine)) {
    echo 'Preg_match: oui <br/>';
}
echo $chaine;
?>

Re: expressions régulières : contrôle du pseudo

par Kaoteknik » 17 oct. 2009, 14:04

C'est à priori la solution qu'il me fallait, sauf que le PCRE n'est pas autorisé sur mon serveur...

En attendant j'ai modifié la ligne de contrôle comme ceci :
if (!preg_match('#^[A-Za-z0-9\u00c0-\u00FF-.*]([ {1,1}]?[A-Za-z0-9\u00c0-\u00FF-.*])*$#', $pseudo)) {
Je vais voir si je peux changer les autorisations sur le serveur, sinon je me passerai des caractères accentués.

En tout cas merci beaucoup pour ton aide Berzemus.

[Edit]
Je ne comprend pas, après vérification, le PCRE est bien activé, donc ça devrait fonctionner.
PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 7.3 2007-08-28

Re: expressions régulières : contrôle du pseudo

par Berzemus » 17 oct. 2009, 12:00

Je pense qu'il faut jouer avec l'encodage, de mémoire il me semble que les fonctions preg_* ne supportent que l'utf8.

Sinon, toujours en unicode, on peut s'amuser avec un range de ce type:

Code : Tout sélectionner

[a-z A-Z \u00c0-\u00FF]
et la tu es assez blindé, sauf pour ce qui est des caractères × et ÷, qui sont intercalés entre les lettres accentuées.


Codes unicode.

expressions régulières : contrôle du pseudo

par Kaoteknik » 16 oct. 2009, 21:24

Bonjour à tous,

je suis actuellement en train de réaliser un formulaire d'inscription sur lequel j'aimerai effectuer un certains nombre de vérifications. Tout d'abord je m'attarderai sur le pseudo.

Voici le code pour le contrôler :
if (!preg_match('#^[\w-\.*]([ {1,1}]?[\w-\.*])*$#', $pseudo)) {
		$valid_form=false;
		$msg_erreur.='- Votre pseudonyme n\'est pas conforme<br />';
	}
Malheureusement avec ce code les pseudonymes ne peuvent pas contenir de caractères accentués.Or, si j'en crois ce que j'ai lu ailleurs :
\w : word metacharacter : une lettre [a-z] [A-Z] ou lettre accentuée, un chiffre [0-9] ou '_'.
Par conséquent les accents devraient être pris en compte comme caractères autorisés. Je ne comprend pas d'où peut venir le problème. Si jamais vous avez une idée...

Merci.