Bonjour à tous,
j'utilise Zend_Filter_PregReplace pour renommer un nom de fichier et notamment supprimer tous les caractères qui ne sont pas des lettres, des chiffres ou des espaces.
La première version de ma regexp est évidemment fausse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if (Zend_Filter_PregReplace::isUnicodeSupportEnabled()) { $notAllowedCharsMatch = '#[\P{Separator}\P{Letter}\P{Number}]+#'; /** * The spaces characters are stripped out and replaced by a single space character */ $spaceCharsMatch = '#\P{Separator}+#'; } else { $notAllowedCharsMatch = '#[^A-Za-z0-9[:spaces:]]+#'; $spaceCharsMatch = '#[[:spaces:]]+#'; }Évidemment les caractères à conserver sont effacés dû au fait qu'une lettre correspond au pattern "n'est pas une espace" ou "n'est pas un chiffre".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $defaultInflector->setFilterRule( 'basename', array( new Zend_Filter_PregReplace(array('match' => $notAllowedCharsMatch, 'replace' => '')), new Zend_Filter_PregReplace(array('match' => $spaceCharsMatch, 'replace' => ' ')), new Zend_Filter_StringToLower(), new Zend_Filter_Word_SeparatorToDash(' '), $iconvFilter ) );
Ma question est donc la suivante : Comment exprimer le pattern suivant :
ni une lettre ni une espace ni un chiffre.
Ou comment joindre les atomes de mon pattern par un AND ?
Merci beaucoup par avance !
Frédéric
Partager