Expressions régulières

Résolu
martins13 Messages postés 66 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 19 juin 2008 - 14 juin 2007 à 17:25
martins13 Messages postés 66 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 19 juin 2008 - 18 juin 2007 à 09:40
Salut à tous!!!

Je cherche à faire une expression régulière pour une adresse postale du type :

13, Boulevard Baille

Mais je veux que les caractères accentués soient pris en compte, mon expression fonctionne sauf lorsque je met un de ces caractères "àáâäçèéêëìíîïðòóôõöùúûü"
Voici ma fonction:

preg_match('`^([0-9]{0,3}?[, ]?[ ]?[A-Za-z\'àáâäçèéêëìíîïðòóôõöùúûü -]{3,50})$`', $adresse)

Merci pour votre aide

6 réponses

DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
15 juin 2007 à 21:13
En effet le problème vient de htmlentities puisque les accents sont encodés avec leurs equivalents &...; . Dans tous les cas, le masque ne match pas les chaines qui contiennent les caractères < > & = " '. Donc l'utilisation de htmlentities n'est plus nécessaire.
3
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
15 juin 2007 à 12:33
Salut,
dans ton cas, c'est la classe \w qu'il faut utiliser. Cette classe supporte les accents ainsi que les caractères - et _. Le masque final devient alors :

<?php

$address = '182, rue des àáâäçèéêëìíîïðòóôõöùúûü';
$pattern = '#^\d{1,3}?,?\s*(\w[ ]?){3,50}$#i';   // \s classe des caractères d'espacement
echo preg_match($pattern,$address)?'true':'false';

?>
0
martins13 Messages postés 66 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 19 juin 2008
15 juin 2007 à 16:18
Merci les classes je les utilise pas assez, ca simplifie mon expression comme ca mais la classe \w ne marche pas apparement pour les caractères accentués. Je viens de tester...
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
15 juin 2007 à 17:45
La chaine analysée (dans l'exemple) est pourtant composée de l'ensemble des accents que tu utilises. C'est l'exemple qui ne marche pas ou ton adaptation de ce code ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
martins13 Messages postés 66 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 19 juin 2008
15 juin 2007 à 18:06
Alors effectivement j'ai testé ton exemple fonctionne mais voilà mon adaption ne fonctionne pas et ce que cela viendrais du fait que j'utilise htmlentities. Voilà le bout de code :
<?php
if (isset($_POST['textfield2']))
       {
         $adresse = htmlentities($_POST['textfield2']);
         $pattern = '#^\d{1,3}?,?\s*(\w[ ]?){3,50}$#i';
         // incrémenter la variable $nb_faux si les champs du formulaire sont vides
           if (empty($_POST['textfield2']))
           {        
             ?>Champs non rempli</td><?
             $nb_faux++;
           }else{  
         // incrémenter la variable $nb_faux si des caracteres ne sont pas autorisés pour l'adresse
        ?><td width="164"><?
        if (!preg_match($pattern, $adresse))
        {
         ?>Caractères non autorisés pour l'adresse<?
         $nb_faux++;}}}
?>

Merci
0
martins13 Messages postés 66 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 19 juin 2008
18 juin 2007 à 09:40
Merci pour ton aide!!!
0