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

Java Discussion :

[Pattern] Autoriser des noms avec des traits d'union


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut [Pattern] Autoriser des noms avec des traits d'union
    Bonjour,

    J'ai la ligne ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	            if ( text.matches( "[a-zA-Z ] *" ))
    Cette ligne n'offre pas n'accepte pas les trait d'union et donc n'accepte pas les prénom comme jean-Michël.

    Cette ligne est écrite dans le cadre d'une class Document

    Voià la class

    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
     
     static class FileCaseDocument extends PlainDocument
    	    {
    	        String text = null;
    	        String str1, str2;
     
    	        @Override
    	        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
    	        {
    	            if (str == null)
    	            {
    	                return;
    	            }
     
    	            text = this.getText(0, this.getLength());
    	            str1 = text.substring(0, offs);
    	            str2 = text.substring(offs, this.getLength());
     
    	            text = str1+str+str2;
     
     
    	            if ( text.matches( "[a-zA-Z ] *" ))
    	            {
     
    		 	          super.insertString(offs, str, a);
    	            	}
    	        }
    	    }
    }
    Comment accepter les traits 'unions ?

    Merci d'avance

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " [a-zA-Z]*-?[a-zA-Z]* "
    Cela résoud ton problème ?

    correspond à n'importe quelle lettre, majuscule ou minuscule
    idem mais on peut ici en avoir de 0 à une infinité d'occurences.

    le " - " représente bêtement le caractère " - ", et le " ? " qui le suis signifie " 0 ou 1 ", tu peux donc ne pas avoir de tiret, ou en avoir un seul.

    Si tu aurait voulu repérer le caractère " ? " , il aurait fallu l'antislasher afin qu'il ne soit pas interpreter : " \? " correspond au caractère " ? "


    EDIT : par contre attention, dans ton exemple, tu cite "jean-Michël". Il me semble que le "ë" ne sera pas considéré comme un "e", tu ne pourras donc pas écrire "jean-michël" mais "jean-michel". Donc à vérifier mais si tu souhaite matcher le "ë" il me semble qu'il faudra le rajouter dans les crochets, à la suite des [a-zA-Zë]

    J'espère t'avoir aidé.

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    La solution de Michon devrait marcher mais il y a plus simple si tu accepter les tirets: [A-Za-z-]*

    Ceci dit cette expression n'est probablement pas suffisante il existe des lettres qui ne sont pas comprises entre a et z (typiquement les caractères accentués). La solution de Michon marche mais il te faut établir une liste complète a rajouter entre les crochets.
    Une autre solution serait d'utiliser la classe prédéfinie \p{L} qui accepte tous les caractères de type lettre, accent compris. avec le support des tiret cela serait [\p{L}-]*

  4. #4
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Citation Envoyé par Uther Voir le message
    utiliser la classe prédéfinie \p{L}
    Interessant, je ne connaissais pas cette classe... par contre dans ta solution rien n'empêche l'utilisateur de saisir des "noms" à une infinité de tirets...

    donc au final suivant les besoins :

    - Soit le nombre de tiret n'est pas important, et donc la solution d'Uther est plus simple :
    - Soit il ne peut y avoir que un tiret maximum, et donc en combinant les deux solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " [\p{L}-]*-?[\p{L}-]* "

  5. #5
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Citation Envoyé par michon Voir le message
    - Soit il ne peut y avoir que un tiret maximum, et donc en combinant les deux solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " [\p{L}-]*-?[\p{L}-]* "
    La classe représentant les caractère est "\p{L}". La forme "[\p{L}-]" permet d'ajouter le caractère "-".

    Donc, pour accepter un seul tiret dans le nom, l'expresseion régulière serait:
    et s'il faut la rentrer dans une chaine litérale, il faut doubler les antislash

  6. #6
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Exact, erreur de ma part, voulu faire trop vite... comme quoi, ne pas confondre vitesse et précipitation

  7. #7
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut [pattern]Numéro de téléphone et adresse email
    Bonjour,

    Je voudrais configurer des champs de texte pour n'accepter que des numéro de téléphone ou des adresse email.

    pour les champs des numéro de téléphone

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	            if ( text.matches( "[0-9]* | [ ] [.] | [/]" ))
    Pour les adresse email

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	            if ( text.matches( "\\p{Lower}* | '&' | '. "  ))
    Pour le moment, aucun champs ne fonctionne mais il me semble que seule, la deuxième partie de l'expression ne marche mais la première fonctionne parfaitement. Résultat, rien ne s'instrit dans le champs.

    Pour le numéro de télépnone par exemple, il faut que le premier caractère soit un chiffre. Pour l'adresse email, il faut que le premier caractère soit une une lettre minuscule.

    Quelle sont les meilleurs expression pour le numéro de téléphone et l'adresse email.

    Merci de me répondre

    Salutations

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Numéro de téléphone:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String patternTelephone = "\\+?[0-9/\\s\\.\\(\\)]+"; //un plus éventuel en tete suivi de chiffres avec ponctuation (espace point parenthèses) éventuelle
    Pour les emails, il n'existe aucune expression régulière qui satisfasse exactement aux règles du RFC. Le plus fiable reste l'email de validation auquel il faut répondre.

  9. #9
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut Adresse email et expression régulière. Vraiement impossible et pourquoi
    Bonjouir,

    Je trouve étonnant que qu'il n'existe pas une expression comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	            if ( text.matches( "\\p{Lower}* | @ | . "  ))
    On dirait que les caractère @ et . ne sont pas admis alors que je voulais n'accepter que les minuscule, les point et une seule fois @ et je voulais que le premier caractère ne soit une lettre minuscule. Franchement étonnant que cela ne corresponde pas aux spécifications.

    Quelles sont-elle et comment corriger mon expression ?

    Pourriez-vous m'expliquer pourquoi l'adresse email ne pourrait être vérifiée a l'aide de l'expression régulière ?

    Est-il vraiment nécessaire de vérifier l'adresse email après coup ?

    Concernant les numéro de téléphone, est-il possible qu'un + soit accepter comme premier caractère.

    Merci pour votre réponse

    Salutations

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Battant Voir le message
    Bonjouir,

    Je trouve étonnant que qu'il n'existe pas une expression comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	            if ( text.matches( "\\p{Lower}* | @ | . "  ))
    On dirait que les caractère @ et . ne sont pas admis alors que je voulais n'accepter que les minuscule, les point et une seule fois @ et je voulais que le premier caractère ne soit une lettre minuscule.
    Heu non, cette expression régulière ne fait pas du tout ça, elle accept les chaine formée de 0 à n minuscule suivie soit de espace soit de espace, suivie de @, suivie soit de espace soit de espace, suivie de un caractère quelconque. Je vous conseille de bien lire comment on fait une expression régulière. Ici pour garder votre logique ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if ( text.matches( "[\\p{Lower}@\\.]*"  ))
    mais encore une fois, ca ne valide pas correctement une adresse email.
    Franchement étonnant que cela ne corresponde pas aux spécifications.

    Quelles sont-elle et comment corriger mon expression ?

    Pourriez-vous m'expliquer pourquoi l'adresse email ne pourrait être vérifiée a l'aide de l'expression régulière ?
    Parceque la RFC est complexe et tordue sur le format valide d'une adresse email, tellement tordue voir récursive par endroit que c'est très complexe à mettre en oeuvre. A tel point que parfois même les serveur mail renoncent à tout faire correctement et laissent passer des trucs invalides Vous trouverez ici un exemple d'expression régulière, et encore, elle n'est pas 100% valide, elle nécessite un prétraitement de l'adresse email préalable. Voici quelque exemples d'adresses valides tirées du rfc3696 qui est un résumé non exhaustif à destination des gens voulant valider une adresse email (vu le nombre d'application développée le faisant mal, voir très mal)

    • Abc\@def@example.com
    • Fred\ Bloggs@example.com
    • Joe.\\Blow@example.com
    • "Abc@def"@example.com
    • "Fred Bloggs"@example.com
    • user+mailbox@example.com
    • customer/department=shipping@example.com
    • $A12345@example.com
    • !def!xyz%abc@example.com
    • _somename@example.com

    Je rajouterais aussi que depuis ce RFC, on peux faire des TLD de n'importe quel nom et des domaine avec caractères unicode, donc ceci serait aussi valide pour peu que les domaines associés existent:
    • admin@unprojet.fsf.copyleft
    • user@example.com. (notez le . final valide)
    • customer-service@péripatéticiennes.be




    Est-il vraiment nécessaire de vérifier l'adresse email après coup ?
    Tout dépend de vos exigences. En général, si vous voulez une vérification de base pour détecter la faute de l'opérateur, la règle <n'importe quoi>@<n'importe quoi> est à peu près la seule validation que vous pouvez mettre en place sans risquer de refuser des adresse valides.
    Concernant les numéro de téléphone, est-il possible qu'un + soit accepter comme premier caractère.
    Sauf erreur de ma part, c'est exactement ce que fait celle que je vous ai fournis

Discussions similaires

  1. Erreur 1004 : Remplir des cellules avec des noms de contrôle.
    Par c.piette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/04/2015, 09h15
  2. Uniformiser des nom avec des erreurs de saisi
    Par Vojislav_Iakovic dans le forum QlikView
    Réponses: 8
    Dernier message: 01/06/2014, 08h42
  3. ouvrir des fichiers avec des noms incomplets
    Par Merel dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/09/2010, 16h01
  4. indexation fulltext des mots avec un trait d'union
    Par andraz dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/03/2007, 16h46
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

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