8710 sujets

Développement web côté serveur, CMS

Hello, je voudrais vérifier qu'un champs "téléphone" de formulaire;
et un autre "code postal";

-soient constitués uniquement de chiffres
-uniquemen de 4 chiffres pour le code postal.

Comment puis-je faire ? J'ai cherché dans la doc, mais je m'embrouille avec les is_numeric, et les autres..
Coucou Smiley cligne

Pour ma vérification de code postal, j'utilise ceci :

if (!eregi("^[0-9]{5}$",$cp)){ // le code postal n'est pas valide
     $msg_err="Votre code postal n'est pas valide";
}


En gros :
!eregi => si le champs ne contient pas
[0-9] => des chiffres
{5} => 5 au minimum et 5 au maximum ... donc 5
^ => commencer
$ => finir

Traduction :
Si le contenu du champs ne commence pas et ne finis pas (donc est égal) à 5 chiffres,
alors la variable erreur reçoit : "Votre code postal n'est pas valide" comme contenu.

Et voilà...
Il ne te resque qu'à simplifier pour avoir une suite numérique de la taile que tu le souhaites
Smiley ravi

<edit> Un code postal est composé de 5 chiffres ... non ?!? Smiley rolleyes </edit>
Modifié par Cygnus (08 Dec 2006 - 13:23)
Modérateur
Cygnus a écrit :

Un code postal est composé de 5 chiffres ... non ?!? Smiley rolleyes


Cela dépend où. Au Québec, il est composé de lettres et de chiffres, 6 en tout. Par exemple : J9Z 4X9. Pour les numéros de téléphone, c'est par exemple 1 819 555-5555. Je pense qu'il faut être prudent lorsqu'on valide ce type de données, encore plus lorsque le site est disponible au publique : donc internationnal. C'est plutôt frustant d'essayer de s'abonner et que le champ n'accepte pas notre code postal ou numéro de téléphone, quand ceux-ci sont pourtant réels et bien formattés.
Modifié par Tony Monast (08 Dec 2006 - 14:41)
Tony Monast a écrit :
Je pense qu'il faut être prudent lorsqu'on valide ce type de données, encore plus lorsque le site est disponible au publique : donc internationnal.
Tout à fait d'accord. Il vaut mieux être trop laxiste que trop strict dans ce cas-là (rien de plus frustrant non plus que de voir son nom tronqué parce que le développeur a décidé qu'il était trop long Smiley smile ).
gordie a écrit :
Comment puis-je faire ?

Exemple
if(ctype_digit($code_postal) && strlen($code_postal)==4)
Bonjour.

On ne le dis pas assez souvent, mais les codes postaux européens sont normalisés:
Un code postal, en europe, est composé de deux lettres suivies d'un tiret, et de cinq chiffres.

Pour la france : fr-12345, l'allemagne de-65432, etc...

Une regex stricte donnerait :

/[a-zA-Z]{2}-[0-9]{5}/


Peut-être un selecteur de regex en, fonction du pays...
GeorgesM a écrit :
On ne le dis pas assez souvent, mais les codes postaux européens sont normalisés:

Donnes le lien vers ces infos ?
Suis curieux de voir pour la Belgique ?
Modifié par Bison (11 Dec 2006 - 14:12)
Le lien:

http://www.iso.org/iso/fr/prods-services/iso3166ma/10faq/frequently-asked-questions.html#Q16


...Le texte...

a écrit :

16: Les codes ISO 3166-1 sont-ils utilisés dans l'adressage postal (sur les enveloppes, etc.) ?
R: Non. L'ISO 3166-1 n'est en général pas utilisé dans l'adressage postal tel que le connaît l'utilisateur courant, c'est-à-dire celui qui écrit l'adresse sur une lettre. (Toutefois, pour la communication au sein des organisations postales et entre elles, l'ISO 3166-1 est largement utilisé à différentes fins.) Les seuls pays au monde qui ont un accord officiel concernant l'inclusion d'un code du pays avant le code postal sont les membres de la Conférence Européenne des Administrations Postales et des Télécommunications (CEPT). Leur code ne coïncide avec l'ISO 3166-1 que dans un petit nombre de cas. Pour une information complète sur l'adressage postal, veuillez consulter les pages du site Web de L'Union Postale Universelle concernant les codes postaux.


Pourquoi, la Belgique ?
Modifié par GeorgesM (12 Dec 2006 - 22:24)
GeorgesM a écrit :
Pourquoi, la Belgique ?

Parce qu'en la Belgique (ou au Luxembourg) un code postal n'a que 4 chiffres et pas 5.

La notation que j'utilise lorsque j'envoie un courrier à l'étranger c'est :
F-75000 pour la France par exemple
ou
L-1234 pour le Luxembourg
ou
NL-12.... pour la Hollande 4 chiffres (parfois 2 lettres)

bref, pas selon la norme que tu donnes Smiley ohwell
Pour info, ereg() va être déplacé vers PECL --et donc potentiellement désactivé par défaut-- dans PHP 6.0, et pareil pour ctype. (référence PHP Release Management Wiki)

Si vous voulez vérifier qu'une chaîne est exclusivement composée de 5 chiffre utilisez preg_match:
preg_match('#^[0-9]{5}$#', $cp)

Modifié par Hubert Roksor (15 Dec 2006 - 03:50)
Bison a écrit :

...
bref, pas selon la norme que tu donnes Smiley ohwell


Désolé. J'étais persuadé que la norme était passée. J'utilisais ce format pour les correspondances internationales il y a quinze ans sur conseil de mes interlocuteurs allemands, qui faisaient de même.

De toute façon un code pays à une seul lettre, ça ne tient pas la route. Mais bon.

un code postal fait donc généralement entre 4 et 6 chiffres, éventuellement précédés par une lettre (majuscule) et un tiret, et éventuellement suivi d'un tiret et d'un suffixe de trois chiffres.
ex : etats-unis, brésil : 22162–101
Hubert Roksor a écrit :
Pour info, ereg() va être déplacé vers PECL --et donc potentiellement désactivé par défaut-- dans PHP 6.0, et pareil pour ctype. (référence PHP Release Management Wiki)

Si vous voulez vérifier qu'une chaîne est exclusivement composée de 5 chiffre utilisez preg_match:
preg_match('#^[0-9]{5}$#', $cp)


Pour ereg, c'est une bonne chose car dépréciée depuis belle lurette.(fonction très lente et limitée)
Par contre en ce qui concerne ctype, je n'en vois pas l'intérêt au contraire Smiley ohwell
Famille code postal, le cousin Grand Breton :

Royaume-Uni : (voir Codes postaux britanniques) le (postcode) peut se présenter sous plusieurs formes : LC CLL, LLC CLL, LCC CLL, ou LLCC CLL avec encore d'autres variantes possibles. La première lettre indique la ville, la zone ou le quartier de Londres du correspondant.

Pour se cultiver sur le sujet, voici une adresse intéressante > http://fr.wikipedia.org/wiki/Code_postal