IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Validation caractère speciaux


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut Validation caractère speciaux
    Bonjour,

    J'ai encore une question

    Voici ce que l'on me demande de faire : Saisir le nom : cette fonction saisit, valide et retourne le nom. Le nom peut contenir seulement les lettres et les caractères suivants: l'espace, l'apostrophe et le tiret. Le nombre de caractères permis dans le nom doit être entre 3 et 20 inclusivement. Elle ne reçoit aucun paramètre.

    - Je ne sais pas comment faire pour que dans mon string je puisse accepter les caractère :l'espace, l'apostrophe et le tiret.

    Voici le résultat sans cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def saisieNom():
        # Variable locale 
        nom = ""
        execption = " '-"
     
        while  not(len(nom)<= 20 and len(nom)>= 3 and nom.isalpha()):
            print("Doit avoir au minimum 3 lettres et au maximum 20")
            nom = input("Entrer votre nom:")
        return nom
    Merci encore pour votre précieuse aide!!!

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Oui, tu n’auras effectivement pas de fonction “toute faite” pour un test de ce genre… Tu as au moins deux solutions*:

    * la “basique” qui consiste à te faire une str contenant tous les caractères autorisés, puis pour chaque caractère du nom entré, tu vérifies qu’il est bien dans ta str de référence.

    * “l’avancée” qui consiste à te faire un set() de tous tes caractères autorisés, et un set() du nom rentré, et tu vérifies que ce dernier est bien inclus dans celui de référence…

    Je te laisse traduire ces algos en python…

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    J'ai pensé a cela, mais ca ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def saisieNom():
        # Variable locale 
        nom = ""
        listeCaractere = "abcdefghijklmnopqrstuvwxyz '-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     
        while  not(len(nom)<= 20 and len(nom)>= 3 and (nom in listeCaractere)):
            print("Doit avoir au minimum 3 lettres et au maximum 20")
            nom = input("Entrer votre nom:")
        return nom
     
    saisieNom()

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    Anybody???

  5. #5
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    (nom in listCaractere) ne marchera pas (cela teste si le nom lui-même est une sous-chaîne de ta liste de caractères), il faut faire une boucle (for) sur chaque caractère de nom

    Ou alors, tu utilises les set() (ensembles), comme suggéré dans mon premier post.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Bonjour

    Pour ce type de problème, il y a non pas une fonction toute faite, mais
    une solution très recommandée : les expressions régulières.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #!/usr/bin/env python
    # -*- coding:UTF-8
     
    import re
     
    def saisieNom():
        # Variable locale
        nom = ""
        regexp = re.compile('^[A-Z\ \' \-]{3,20}$',re.IGNORECASE)
        while  regexp.match(nom) is None:
            print("Doit avoir au minimum 3 lettres et au maximum 20")
            nom = input("Entrer votre nom:")
        return nom
    saisieNom()
    Le plus important est la définition de l'expression :
    • Entre crochets : sont admises les lettres de l'alphabet, ou l'espace ou l'apostrophe ou le tiret.
    • Entre accolades : entre 3 et 20 caractères
    • Quand au signes ^ et $, ils signifient respectivement le début et la fin de la chaîne.Et donc, que cela doit correspondre pour tous les caractères.

Discussions similaires

  1. Insertion caractères speciaux
    Par Halukard dans le forum Access
    Réponses: 3
    Dernier message: 19/02/2007, 11h46
  2. [C# 2.0]Problème de caractères speciaux
    Par Tatanne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/07/2006, 02h51
  3. Probleme de lecture d'un fichier avec caractères speciaux
    Par bygui dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/06/2006, 09h35
  4. Caractéres speciaux
    Par cerede2000 dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2006, 15h11
  5. delphi XML / HTML caractéres speciaux !
    Par adem dans le forum EDI
    Réponses: 2
    Dernier message: 29/08/2002, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo