expressions régulières preg_match()

Mammouth du PHP | 985 Messages

02 oct. 2009, 20:48

Bon ben quelque-chose m'échappe alors car:
# \w Tout caractère "de mot" [a-z0-9_] plus les accentués
# \W Tout autre caractère qu'un caractère "de mot"
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 985 Messages

02 oct. 2009, 22:48

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;
?>
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.