OVH Cloud OVH Cloud

regexp simple qui ne marche pas...

19 réponses
Avatar
CrazyCat
Bonjour à tous...

J'essaye de faire une regexp très simple qui permet de formatter
proprement un numéro de télephone, c'est à dire:
mon téléphone est stocké sous forme de chaine, par exemple "0123456789"
Pour l'affichage, je veux mettre "01.23.45.67.89"

Voila ce que je fait:
function tel_sql_php($sql_tel) {
$pattern = "([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})";
if (eregi($pattern, $sql_tel, $myregs)) {
$php_tel =
$myregs[1].".".$myregs[2].".".$myregs[3].".".$myregs[4].".".$myregs[5];
return $php_tel;
}
}

Ceci fonctionne, mais sitot que j'utilise des caractères plus propres,
c'est à dire que j'utilise:
$pattern = "(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})";
ça ne marche plus, le eregi ne match pas.

Quelqu'un peut il me dire ce que je rate?

Merci bien
--
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net
Tout sur les eggdrops: http://www.c-p-f.org

9 réponses

1 2
Avatar
AAA
Pas d'accord :
- La solution peut être facilement modifiée pour permettre des choses plus
complexes. Par exemple
$pattern = "([0-9]{2})[ -.]*([0-9]{2})[ -.]*([0-9]{2})[ -.]*([0-9]{2})"
permet de gérer des numéros de tel formattés avec des espaces, des tirets
ou des points entre les groupements de deux nombres. Ca devient vite un
cauchemard avec des substring et des strpos.

Si tu veux gérer les numéros sous la forme +(33)12345678 tu commences tes
substrings à l'indice du ) et non à l'indice zéro.


Ou tu rajoutes (+([0-9]{1,2}))? au début du pattern... ce qui a
l'avantage de ne pas interpréter comme numero de téléphone n'importe quoi
qui contient une parenthèse fermante et une suite de nombres.


__________________________________________________________
Bonjour,
j'essaie ceci : $pattern "(+(d{1,2,3}))[ -.]*([0-9]{2})[ -.]*([0-9]{2})[ -.]*([0-9]{2})[ -.]*([0-9]{2})";
dans la formule mais je ne trouve pas la bonne syntaxe.

La lecture du http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php
manque de quelques exemples d'illustrations
Quelqu'un aurait-il une adresse du genre "PCRE pour les nuls"
merci
IB


Avatar
Vincent Lascaux
j'essaie ceci : $pattern > "(+(d{1,2,3}))[ -.]*([0-9]{2})[ -.]*([0-9]{2})[ -.]*([0-9]{2})[ -.]*([0-9]{2})";
dans la formule mais je ne trouve pas la bonne syntaxe.


Je pense qu'il faut précéder + d'un ...
d{1,2,3} n'est pas syntaxiquement correct : c'est d{1,3} pour dire entre 1
et 3 nombres
Je pense qu'il faut doubler les dans les expressions rationnelles dans les
[ ]
En php, '' vaut (il faut aussi doubler les ). Donc si tu veux parler
d'un antislash en expression régulière, il faut en mettre 4 (me trompè je ?)

Essaie ca (non testé)

$pattern =
"(+([0-9]{1,3}))[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[
-\.]*([0-9]{2})";

--
Vincent

Avatar
AAA
"Vincent Lascaux" a écrit dans le message de news:
41dc6798$0$31524$
Essaie ca (non testé)

$pattern =
"(+([0-9]{1,3}))[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[
-\.]*([0-9]{2})";

Bonjour

Un grand merci pour ton aide.
J'ai fait "bêtement" un copier/coller et j'ai :
Warning: Unknown modifier '[' in c:blablablatmp15ons9wv2t.php on line
11
ce qui est déjà le message d'erreur que j'obtenais précédemment.
Si en plus, tu connais une adresse où je puis me former à l'apprentissage du
$pattern .... ? ca me serait utile
merci
IB

Avatar
Vincent Lascaux
$pattern =
"(+([0-9]{1,3}))[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[
-\.]*([0-9]{2})";

Bonjour

Un grand merci pour ton aide.
J'ai fait "bêtement" un copier/coller et j'ai :
Warning: Unknown modifier '[' in c:blablablatmp15ons9wv2t.php on
line 11


Ce code

$pattern =
"(+([0-9]{1,3}))[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[
-\.]*([0-9]{2})";
if(ereg($pattern, "+(33) 01 23 45 67 89"))
{
echo "Tel OK";
} else {
echo "Tel KO";
}

affiche Tel OK chez moi

--
Vincent


Avatar
AAA
"Vincent Lascaux" a écrit dans le message de news:
41ddc52e$0$22708$
Ce code
$pattern =
"(+([0-9]{1,3}))[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[
-\.]*([0-9]{2})";
if(ereg($pattern, "+(33) 01 23 45 67 89"))
{
echo "Tel OK";
} else {
echo "Tel KO";
}

affiche Tel OK chez moi


Très bien. Peut-on en déduire que le $pattern n'a pas la même syntaxe pour
ereg() que pour preg_match_*
par exemple, je fais un petit test comme cela :

<form name="form" method="post" action="">
<input name="tel" type="text" id="tel">
<input type="submit" name="Submit" value="Envoyer">
</form>
<?php
if(isset($_POST['tel'])){
$pattern =
"(+([0-9]{1,3}))[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[ -\.]*([0-9]{2})[
-\.]*([0-9]{2})";
echo "le téléphone formatté donne : ".($_POST['tel'])."<br>explications
:<br>";
echo preg_match_all($pattern, $_POST['tel'], $myregs);
var_dump ($myregs);
echo "<hr>";
if($result = ereg($pattern, $_POST['tel'])){
echo "Tel OK : $result";
} else {
echo "Tel KO";
}
}
?>

qui donne le message d'erreur dont je parle à la ligne du preg_match_all.

Où puis-je trouver un bouquin ou autre pour apprendre les bases ?
-- IB

Avatar
Olivier Miakinen

Peut-on en déduire que le $pattern n'a pas la même syntaxe pour
ereg() que pour preg_match_*


Oui.
<http://fr.php.net/manual/fr/ref.regex.php>
<http://fr.php.net/manual/fr/ref.pcre.php>

Où puis-je trouver un bouquin ou autre pour apprendre les bases ?


<http://fr.php.net/manual/fr/>

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
AAA
"Olivier Miakinen" <om+ a écrit dans le message de news:
crmg02$1hvp$

Peut-on en déduire que le $pattern n'a pas la même syntaxe pour
ereg() que pour preg_match_*


Oui.
<http://fr.php.net/manual/fr/ref.regex.php>
<http://fr.php.net/manual/fr/ref.pcre.php>



merci mais j'avais déjà consulté ces adresses. Ces pages sont déjà trop
appronfondies pour que je comprenne la différence entre ereg() et preg_*()

Où puis-je trouver un bouquin ou autre pour apprendre les bases ?


<http://fr.php.net/manual/fr/>


Je parlais des bases de ereg() et preg_*(). Explications sur PCRE et autre
... de façon à comprendre les syntaxes du pattern et connaitre la différence
entre ereg() et preg_match_*

cordialement et avec mes remerciements pour votre aide
IB


Avatar
Olivier Miakinen

<http://fr.php.net/manual/fr/ref.regex.php>
<http://fr.php.net/manual/fr/ref.pcre.php>


merci mais j'avais déjà consulté ces adresses. Ces pages sont déjà trop
appronfondies pour que je comprenne la différence entre ereg() et preg_*()


Ah, je ne pouvais pas deviner ce que tu avais déjà lu.

Pour aller un peu plus loin dans la syntaxe des preg, il y a ceci :
<http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php>
<http://www.pcre.org/>

Je ne connais pas de doc « différentielle » comparant ereg et preg et
donnant les différences entre les deux, mais d'après ce que j'ai compris
il vaut mieux oublier les ereg complètement car les preg sont beaucoup
plus performantes (et plus puissantes).


Par ailleurs, j'ai bien reçu ta réponse par courrier. J'ai supposé
que c'était une erreur et j'ai préféré répondre ici puisque d'autres
peuvent être intéressés par ces liens.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.


Avatar
AAA
"Olivier Miakinen" <om+ a écrit dans le message de news:
cs8ahd$1dst$
...
Pour aller un peu plus loin dans la syntaxe des preg, il y a ceci :
<http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php>
<http://www.pcre.org/>

Je ne connais pas de doc « différentielle » comparant ereg et preg et
donnant les différences entre les deux, mais d'après ce que j'ai compris
il vaut mieux oublier les ereg complètement car les preg sont beaucoup
plus performantes (et plus puissantes).



merci d'avoir répondu si rapidement.
Avec les adresses que tu as fournies, j'ai trouvé celle ci :
http://www.perldoc.com/perl5.8.0/pod/perlre.html
qui répond assez à ma recherche
S'il y avait des exemples quelque part, ca aiderait à la compréhension !
et mes excuses pour le message en direct = une erreur de manip !

cordialement
IB

1 2