Expressions régulières

[Résolu]
Signaler
Messages postés
66
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
19 juin 2008
-
Messages postés
66
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
19 juin 2008
-
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

Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
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.
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
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';

?>
Messages postés
66
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
19 juin 2008

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...
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
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 ?
Messages postés
66
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
19 juin 2008

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
Messages postés
66
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
19 juin 2008

Merci pour ton aide!!!