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

Collection et Stream Java Discussion :

utilisation de rexgep


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Par défaut utilisation de rexgep
    salut !
    J'ai écrit un petit programme qui doit indiquer à l'utilisateur si son mot est correct ou pas(si ce n'est pas le cas une fenetre s'ouvre est indique l'erreur puis affiche le mot en rouge) lorsqu'il le tape dans plusieurs JtextField. J'ai utlilisé regexp pour faire cela. Mais bizarrement lorsqu'on tape un mot incorrect avec un nombre pair de lettre, le programme le laisse passer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    /*******le champs Jtextfield****************/
        //champs nom    	
        JLabel chpsnom = new JLabel("Nom");
        chpsnom.setBounds(30,50,30,20);
        frame.getContentPane().add(chpsnom);
        fieldname = new JTextField();
        fieldname.setBounds(100,50,150,20);
        fieldname.addKeyListener(this);
        frame.getContentPane().add(fieldname);
    /******fin ********/
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    /******** actionPerformed + traitement du JTexfield********/
    public void actionPerformed(ActionEvent e) {
        //recupérer la nom du bouton qui a été cliqué
        String command = e.getActionCommand();
        //modèle de comparaison pour le regexp
        String model ="[^a-zA-z0-9\\séè\\-_'&]";
        String model2 ="[^0-9]";
     
        if(command.equals("ok")) {
        //test les conditions, si toutes les JtextField sont différents de null alors
        //on passe à else sinon on affiche un message
          if(fieldname.getText().equals("") || fieldaddrese.getText().equals("") ||
    	 fieldtel.getText().equals("") || fieldcodepostale.getText().equals("") ||
    	 fieldville.getText().equals("")) {
    	     	JOptionPane d = new JOptionPane();
    	     	d.showMessageDialog(frame,"Un ou plusieurs champs n'a pas été rempli",
    	     	                    "Erreur de frappe",JOptionPane.INFORMATION_MESSAGE);
           }
            else {
    	   if(!(fieldname.getText().equals(""))) {
    	 	fieldname.setForeground(Color.black);//repasse en noir si le texte est rouge
    	 	String texte = fieldname.getText();
    	 	Pattern p = Pattern.compile(model);
    	 	Matcher m = p.matcher(texte);
     
    	 	while(m.find()) {
    	 	     if(m.find()== false) {
    	 	        count++;
    	 		fieldname.setForeground(Color.red);
    	 		break;
    	 	      }
    	 	}
    	     }//fin if1
     
           if(count == 0) {
    	   try {
    	   //récupèrer les données de la fenêtre
    	      DataFournisseur f1 = new DataFournisseur();
    	      f1.setnomFournisseur(fieldname.getText());
    	      //envoie les données à l'objet FrameFournisseur
    	      FrameFournisseur dataF1 = new FrameFournisseur(f1,0);
    	      //dataF1.fenetre();
    	      frame.dispose(); 
    	   }
    	// recupérer une exception si le champs fieldtel ou fieldcodepostale 
           //ne sont pas correctement reconvertis en int
    	   catch(NumberFormatException evt) {
    	      JOptionPane message_error = new JOptionPane();
    	      message_error.showMessageDialog(frame,"Une erreur s'est   produite,veuillez resaisir les données",
    	      "Erreur",JOptionPane.ERROR_MESSAGE);
               }
       }//fin count
        else if(count !=0){
    	JOptionPane message_error = new JOptionPane();
    	message_error.showMessageDialog(frame,"Certains champs n'ont pas été correctement remplis",
    	"Erreur de frappe",JOptionPane.INFORMATION_MESSAGE);
    	count = 0;// réinitialise à zéro pour la prochaine vérification
         }
       }
    }
    Avez vous une petite idée d'ou peut venir l'erreur ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Salut,
    je n'ai pas lu tout ton code mais j'ai remarqué que tes regex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     String model ="[^a-zA-z0-9\\séè\\-_'&]";
        String model2 ="[^0-9]";
    ne reconnaissent qu'une lettre. Il ne manquerait pas une etoile ou un plus ou un intervalle quelque part?

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    De plus tu appelles deux foid find() de suite, ce qui fait que tu saute une lettre à chaque fois...


    Et tu n'as pas dit le principal : Quel format doivent respecter ces mots (eventuellement avec des exemples de ce qui est correct et de ce qui ne l'est pas). Sinon comment pourrait-on corriger ta regexp !!

    a++

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Par défaut
    ha bon! J'appelle 2x find. Je pensais le contraire.
    un mot correct par exemple pour le champs nom peut contenir des lettres, des chiffres et certains caractères spéciaux( ' _ - ect...), j'ai pas trouvé utile de limiter le nombre de lettres.
    Ex : entrêprise l'Heritage Des développeurs 007 -> correct
    entreprise l'Héritage$$¨|`ç -> incorrect

    Salut,
    je n'ai pas lu tout ton code mais j'ai remarqué que tes regex
    Code :

    String model ="[^a-zA-z0-9\\séè\\-_'&]"; String model2 ="[^0-9]";

    ne reconnaissent qu'une lettre. Il ne manquerait pas une etoile ou un plus ou un intervalle quelque part?
    Je me demande si c'est vraiment utile ? Le but du programme est de chercher un caractère qui ne concorde pas avec le modele. J'ai pensé que dès qu'il rencontre un caractère qu'il n'aime pas il sort de la boucle et l'affiche en rouge. Pour etre franc, je sais pas si faut faire comme ca et pis quand j'ai pensé à l'utilisation du Jtextfield c'était plutot dans la logique que l'utilisateur tape des noms d'entreprise et non des mots courants, un peu comme dans l'exemple.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par snoopo
    ha bon! J'appelle 2x find. Je pensais le contraire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        while(m.find()) {
            if(m.find()== false) {
                count++;
                fieldname.setForeground(Color.red);
                break;
            }
        }
    De plus tu n'as pas besoin de rechercher tous les caractères incorrect : si un seul est présent tu peux arrêter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Matcher m = p.matcher(texte);
            boolean isValid = ! m.find(); // si on trouve un caractère ce n'est pas bon !
     
            if (isValid) {
                // Traitement si OK
                System.out.println( texte + " >> correct");
            } else {
                // Traitement si NOT-OK
                System.out.println( texte + " >> incorrect");
            }

    Sinon juste une remarque, tu peux utiliser \p{L} dans ton expression pour représenter n'importe quelles lettres (accentué ou pas). Pour les alphabets latin c'est plus simple que de se tapper tous les accents

    a++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Par défaut
    merci du conseil et du code. Je vais le tester

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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