Expressions régulières - Patterns pour RegExp

david84

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Re

Modifications effectuées dans le fichier ci-joint.
J'ai placé quelques explications en commentaire dans le code afin de permettre à l'utilisateur d'en comprendre le principe d'utilisation.

Il sera éventuellement possible à terme d'enregistrer la fonction dans la boîte de dialogue "Insérer une fonction" avec une description des arguments de la fonction et quelques mots d'explication si cela peut aider l'utilisateur lamba.
A+
 

Pièces jointes

  • ExtraireDateMat_v2bis.xlsm
    156.8 KB · Affichages: 106
  • ExtraireDateMat_v2bis.xlsm
    156.8 KB · Affichages: 120
  • ExtraireDateMat_v2bis.xlsm
    156.8 KB · Affichages: 121

david84

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour,
suite à quelques bugs constatés et à certaines idées qui me sont venues à la suite de quelques tests, je vous joins la version 3 de la fonction ExtraireDateMat.

Les modifications apportées sont les suivantes :
1) ajout de 2 autres arguments optionnels permettant le traitement et le choix de l'affichage des dates incomplètes du type 25 décembre ou décembre 2000 ou décembre.

Par défaut, 25 décembre affichera 25/12/année en cours.
L'argument CetteAnnée passé à FAUX ou 0 renseignera l'utilisateur sur le fait que l'année est manquante (25/12/_).

Par défaut, décembre 2000 affichera 01/12/2000.
L'argument PremJour passé à FAUX ou 0 renseignera l'utilisateur sur le fait que le jour est manquant (_/12/2000).

Par défaut, décembre affichera 01/12/année en cours.
L'argument PremJour passé à FAUX ou 0 renseignera l'utilisateur sur le fait que le jour est manquant (_/12/année en cours).
L'argument CetteAnnée passé à FAUX ou 0 renseignera l'utilisateur sur le fait que l'année est manquante (01/12/_).
Les 2 argument passé à FAUX renseigneront l'utilisateur sur le fait que le jour et l'année sont manquants (_/12/_).

Bien entendu, ces arguments n'influent pas sur une date complète.

2) Prise en compte à titre expérimental des dates du type l'an deux mille, le vingt-cinq décembre (l'année doit être supérieure à 999 et le mois rédigé en toutes lettres).

3) Révision du traitement des formats de date susceptibles d'être appliqués afin de traiter les nouvelles fonctionnalités.

Les 3 feuilles de tests vous permettent de tester la fonction de votre côté si le coeur vous en dit car il doit rester des bugs.

Il serait également utile de tester de votre côté la fonction en recopiant dans une feuille de calcul un texte comportant des dates pour vérifier les résultats retournés.
Si certain(e)s veulent le faire, merci de m'indiquer le texte traité et le résultat obtenu (vous pouvez poster votre fichier test ou indiquer le lien vers la page Internet d'où le texte est issu par exemple).

Bon dimanche.
A+
 

Pièces jointes

  • ExtraireDateMat_v3_XLD.xlsm
    150.3 KB · Affichages: 114
  • ExtraireDateMat_v3_XLD.xls
    443 KB · Affichages: 140
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour le forum,


Je remonte ce vieux fil pour amateurs d’expressions régulières car je suis tombé sur un outil sympa permettant de visualiser le traitement d’une expression régulière. Ça se passe par là (source).

C’est vraiment sympa, et le résultat est impressionnant. Voici ce que donne l’expression régulière pour contrôler la validité d’une adresse mail. Il m’a même semblé voir (visualiser plutôt :p) une petite erreur :
^([a-zA-Z0-9_\.\-])+@(([a-zA-Z0-9\-])+\.)+(com|org|net|gov|biz|info|name|aero|fr|be|co\.uk|it|es|de|info)+$

.

En plus, vu que c’est open source, ça a déjà été implémenté par d’autres personnes :).

A+
 

Pièces jointes

  • RegExp.png
    RegExp.png
    88.4 KB · Affichages: 200
  • RegExp.png
    RegExp.png
    88.4 KB · Affichages: 203
  • RegExp.png
    RegExp.png
    88.4 KB · Affichages: 199
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonsoir à tous


Merci à toi mromain pour ce sympathique outil ;)

(et mes amitiés à JPN si il repasse dans son fil un de ces quatre ;) )
 

david84

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour et merci à mromain de faire remonter ce fil.

Où vois-tu une erreur ?

Je n'ai pas testé le motif mais si c'est la partie
qui t'interpelle ce n'est pas une erreur pour l'auteur de cette expression régulière car co.uk fait partie des possibilités listées dans le groupe 4. Après, elle peut ne pas exister telle quelle mais cela est un autre problème (ce n'est pas une erreur de construction syntaxique de l'expression).

Par contre la partie
du groupe 1 peut être remplacée par un simple
et la partie
du groupe 2 peut être remplacée par
ou
en plaçant la propriété IgnoreCase à True.

Personnellement j'aurai utilisé la propriété IgnoreCase=True et aurait enlevé les A-Z en ne gardant que les a-z (suffisant) car en l'état il me semble que le motif refuse les extensions en majuscule (il accepte .fr mais pas .FR). Or celles-ci sont acceptées dans une adresse mail (il suffit de tester ton adresse mail tout en majuscule pour le constater).

Mais bon là on ne voit que le motif. Si l'auteur à placé précédemment dans son code un IgnoreCase à True tout est ok et on peut alors supposer qu'il a délibérément utilisé
à la place de
uniquement dans un souci de clarté du motif pour les personnes qui sont moins familiarisées avec les expressions rationnelles.
A+
 

Roland_M

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

bonjour,

@David84

tu aurais dû mette l'adresse telle que tu la conçois avec tes explications !
merci d'avance.
 

mromain

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour le forum, david :)

C'est bien la partie co\.uk qui m'a interpellée.
Il manquait le \ dans la proposition initiale, et voici ce le résultat engendré qui m'a permis de visualiser l'erreur :


N'étant qu'un simple padawan des expressions régulières, j'ai lu avec grande attention tes remarques et je les digère petit à petit :p.

Une chose est sûre, cet outil de visualisation des expressions va énormément m'aider dans la construction des regexp (du moins le temps d'être familiarisé avec les notions de groupes et les différents caractères particuliers).

A+
 

Pièces jointes

  • RegExp.png
    RegExp.png
    65.7 KB · Affichages: 157
  • RegExp.png
    RegExp.png
    65.7 KB · Affichages: 186
  • RegExp.png
    RegExp.png
    65.7 KB · Affichages: 187

C@thy

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Alors là, bravo, David84, mromain, vous êtes des pros des expressions régulières, avec notre ami JNP, bien sûr!

C@thy
 

MJ13

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour à tous

Ah, mais moi, j'utilise jamais les RegExp :eek:, trop dur, mais il y a pas longtemps, j'ai retrouvé un code bien sympa de Bruno pour avoir le nom de fichiers sans caractères non autorisés en enregistrement et là ce fut une révélation :).

https://www.excel-downloads.com/threads/enregistrement-fichier-en-xls-avec-office-2010.173985/

Et voici le code:

Code VBA:
Function NomFichierValide(sChaine As String)
With CreateObject("VBScript.RegExp")
.Pattern = "\W"
.Global = True
NomFichierValide = .Replace(sChaine, "")
End With
End Function
 

david84

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

bonjour,

@David84

tu aurais dû mette l'adresse telle que tu la conçois avec tes explications !
merci d'avance.

Ci-joint le motif inséré dans une fonction avec en commentaire le motif initial et en dessous le même motif retouché (mais non testé) :
Code:
Function AdresseMailValide(ByVal strAdresseMail As String) As Boolean
  Dim oRegExp As Object
  strAdresseMail = Application.WorksheetFunction.Trim(strAdresseMail)
  If strAdresseMail = vbNullString Then Exit Function
  Set oRegExp = CreateObject("vbscript.regexp")
  oRegExp.IgnoreCase = True
  'oRegExp.Pattern = "^([a-zA-Z0-9_\.\-])+@(([a-zA-Z0-9\-])+\.)+(com|org|net|gov|biz|info|name|aero|fr|be|co\.uk|it|es|de|info)+$"
  oRegExp.Pattern = "^([\w\.\-])+@(([a-z0-9\-])+\.)+(com|org|net|gov|biz|info|name|aero|fr|be|co\.uk|it|es|de|info)+$"
  If oRegExp.test(strAdresseMail) = True Then AdresseMailValide = True
End Function
Après il faudrait reprendre les extensions pour le rendre opérationnel sur des adresses françaises (ex gouv et non gov, etc.).
Vous pouvez tester le motif sur le site indiqué par mromain pour bien le détailler mais si vous avez des questions n'hésitez pas.
A+
 

JNP

XLDnaute Barbatruc
Re : Expressions régulières - Patterns pour RegExp

Bonjour :)
Je passe très rarement, mais ça me fait bien plaisir que ce fil soit relancé :)
Bisous à toutes et à tous :)
 

Statistiques des forums

Discussions
311 729
Messages
2 081 970
Membres
101 852
dernier inscrit
dthi16088