[UDF] ConsoleWrite et MsgBox simply

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Jeep
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 24 janv. 2019 16:34
Localisation : Belgique
Status : Hors ligne

[UDF] ConsoleWrite et MsgBox simply

#1

Message par Jeep »

Voici un petite librairie (UDF) que j’utilise tout le temps. Rien de bien métaphysique, elle est là juste pour nous me simplifier la vie.

Lorsque j’utilise la fonction ConsoleWrite,
99,99 fois sur 100 s’est en passant à la ligne et 99,99 fois sur 100, s’est pour examiner le contenu d’une variable. A force de prendre souvent les mêmes paramètres et la même mises en forme, _CW, _CW_Fmt, CW_NL et _CW_Sep sont nées.

_CW : utlisation simple de ConsoleWrite
_CW_Fmt : "Fmt" pour formatage, elle permet d’afficher des repères de longueur pour évaluer le format la longueur d’une variable et la position de certains caractères sans trop compter :D .
_CW_NL : affichage d'une nouvelle ligne blanche
_CW_Sep : affichage d'une ligne séparatrice

Pour les fonctions dérivées de MsgBox() à nouveau le même constat, toujours les mêmes paramètres suivant le contexte : Info, Error ou Warning. Ainsi sont nées _MB_Info, _MB_Error et _MB_Warning.

Quand à MB_IsOk, le même constat quelle réponse du point de vue logique nous intéresse dans une question proposant deux choix : d’accord ou pas d’accord et pas grand-chose d’autre (True or False).

Toutes vos remarques, suggestions et critiques constructives sont les biens venues.

Question pour les modérateurs du site :

Autoitscript.fr et Autoitscript.com sont de grandes sources d’inspiration et d’aide pour moi, où vaut-il mieux poster ce genre d’utilitaire ? A mon avis sur les deux. Mais lors de l’évolution de l’UDF, la duplicité des sources conduit systématiquement à des incohérences au cours des diverses versions.
Ou dois-je mettre la « Master référence »:-) ?
JPD_Simply.au3
Fichier UDF
(8.86 Kio) Téléchargé 1561 fois
JPD_Simply_Demo.au3
Fichier exemple et démo
(1.68 Kio) Téléchargé 1533 fois
Modifié en dernier par Jeep le ven. 08 févr. 2019 01:06, modifié 1 fois.
Un problème complexe peut souvent se découper en problèmes simples. Mais où est la scie ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#2

Message par mikell »

Déplacement dans "Fonctions et UDF" effectué Image

J'imagine qu'après les messages et les string, l'UDF suivant va porter sur les maths. Forcément. Suggestion :

Func _Add($a, $b)
      Return $a + $b
EndFunc
...
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Jeep
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 24 janv. 2019 16:34
Localisation : Belgique
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#3

Message par Jeep »

Cher mikell,
Est-ce de l'humour ou une critique non constructive ? Auquel cas cher modérateur elle va a l'encontre des règles de votre site.
Pour ma première publication. Je trouve l'acceuil plutôt glacial.
Les paroles s'envolent et les écrits restent.
Un problème complexe peut souvent se découper en problèmes simples. Mais où est la scie ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#4

Message par mikell »

Eh oui, c'est le problème quand on a plusieurs casquettes. Comment s'exprimer ?

En tant que modérateur, je n'ai pas de commentaire particulier. Chacun est libre de se servir d'AutoIt comme il l'entend, et de poster ce qu'il veut dans le cadre des règles du forum - règles que j'ai respectées d'ailleurs : pas de troll ni d'insultes, politesse, etc

En tant qu'utilisateur, personnellement je n'alourdirai pas mon script avec des fonctions dont pour beaucoup le seul but n'est que de faire économiser quelques secondes de clavier et/ou de remplacer une ou deux lignes de code "classique"

En tant qu'amoureux d'AutoIt, je pense que pour la créativité et la capacité à progresser il est infiniment préférable d'apprendre à utiliser correctement les opérateurs et les fonctions intégrées 'de base' avec leurs paramètres plutôt que d'utiliser du pré-mâché à usage restreint

En tant qu'assidu du forum US, j'ai remarqué que là-bas le staff se décarcasse pour essayer de faire comprendre aux gens que si on veut avancer, il faut mouiller le maillot. Faire un minimum d'efforts, quoi

Mais bon, tout ça reste bien sûr un avis personnel. Chacun a toute liberté d'utiliser s'il le souhaite une fonction _Add() plutôt que l'opérateur "+" , ou d'employer une ribambelle de fonctions _string* à usage unique plutôt que d'apprendre à utiliser StringRegExpReplace (qui offre tout de même un peu plus de perspectives)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#5

Message par orax »

Au lieu de créer des fonctions, tu peux aussi utiliser les abréviations. Dans SciTE4AutoIt, va dans le menu Tools, puis SciTE Config > Other Tools > Run Abbrev Manager. Tu pourras voir celles qui existent déjà et en ajouter.
Par exemple, quand tu tapes cw suivi d'un espace, ça remplace cw par ConsoleWrite( & @CRLF)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Jeep
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 24 janv. 2019 16:34
Localisation : Belgique
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#6

Message par Jeep »

Bonjour Orax,
Merci pour la remarque sur les raccourcis SciAutoit, je connais un peu. Mais chaque fois que je change de PC. Mes raccourcis sont perdus.

D'autre part, cela devient un peu plus difficile avec la fonction _CW_Fmt qui fait un peu plus que ConsoleWrite.

Et pour les fonctions _MB_Info, MB_IsOk, ... () j'avoue être paresseux et être exaspéré de devoir rouvrir l'aide pour retrouver les constantes à utiliser avec MsgBox pour les icônes et les boutons (sans oublier l'include en début de scripte), donc j'ai écris de RIDICULES fonctions. Mais le ridicule ne tue pas.

D'autre part à chaque fois que je dois créer plus de deux fois le même traitement, je crée une fonction. Cela m'évite de réfléchir une troisième fois au même problème. Mais sans lire le code des fonctions (notamment des fonctions String proposées ailleurs JPD_String) la critique est aisée pour certains.
Un problème complexe peut souvent se découper en problèmes simples. Mais où est la scie ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#7

Message par mikell »

à chaque fois que je dois créer plus de deux fois le même traitement, je crée une fonction.
Tout le monde fait ça. Et moi le premier, sauf quand la fonction ne remplace qu'une seule ligne de code (ce qui est le cas pour un certain nombre de fonctions JPD_string) .
Mais je ne peux pas laisser dire que j'ai posté sans lire l'UDF. Sur ce plan on peut me taxer de ce qu'on veut mais pas de malhonnêteté... j'ai été le premier à la télécharger :mrgreen:
Commenter ces fonctions _string ça ferait un post assez long (parce qu'on doit prouver ce qu'on affirme), là pas le temps mais plus tard je peux développer : dans ce sujet ou dans le sujet concerné, ou alors par MP si vous préférez (histoire de ne pas trop polluer le topic), ou alors un mix des deux, pourquoi pas ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11772
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#8

Message par Tlem »

Bonjour Jeep.
mikell a écrit :J'imagine qu'après les messages et les string, l'UDF suivant va porter sur les maths. Forcément. Suggestion :

Code : Tout sélectionner

Func _Add($a, $b)
      Return $a + $b
EndFunc
Jeep a écrit : jeu. 07 févr. 2019 15:07 Cher mikell,
Est-ce de l'humour ou une critique non constructive ? Auquel cas cher modérateur elle va a l'encontre des règles de votre site.
Pour ma première publication. Je trouve l'acceuil plutôt glacial.
La réaction de mikell ne me semble pas vraiment déplacée dans le sens ou en lisant le code de vos UDFs vous faites exactement ce que mickell à écrit !
Pour exemples :

Code : Tout sélectionner

Func _CW_NL()
	ConsoleWrite(@CRLF)
EndFunc   ;==>_CW_NL
ou encore :

Code : Tout sélectionner

Func _StringAppend($sInput, $sValue, $sDelim = "|")
	If $sInput = "" Then $sDelim = ""
	Return $sInput & $sDelim & $sValue
EndFunc   ;==>_StringAppend
Au lieu de prendre cela pour une attaque personnelle, vous auriez pu tout simplement admettre que vos UDFs sont totalement personnels et de par ce fait pas adaptés à un partage communautaire, car comment se souvenir de la syntaxe de vos commandes sans visualiser le corps de l'UDF.

Comment vais-je me souvenir que la fonction _CW_NL() me retourne un retour chariot dans la console et donc de transformer un code simple du genre :

Code : Tout sélectionner

ConsoleWrite("Bonjour Paris" & @crlf & "Comment ça va ?" & @crlf )
en usine à gaz :

Code : Tout sélectionner

ConsoleWrite("Bonjour Paris")
_CW_NL()
ConsoleWrite("Comment ça va ?"
_CW_NL()
Alors qu'avec SciTE4AutoIt un simple cw + espace fait la même chose que votre _CW_NL(). ^^

Sans dénigrer votre travail personnel, en lisant le code de vos UDFs, on ne peux qu'en déduire que vous avez voulu réinventer la roue.
Si vous souhaitez réellement vous simplifier la vie, comme vous l'a suggéré Orax, vous devriez plutôt étudier la gestion des raccourcis de SciTE4AutoIt qui vous permettrons de réellement gagner du temps à la saisie. Les deux fichiers utilisés pour cela sont :

Code : Tout sélectionner

au3abbrev.properties
au3UserAbbrev.properties
et se trouves dans le dossier : %USERSPROFILE%\AppData\Local\AutoIt v3\SciTE
Lors d'un changement de PC il vous suffira de sauvegarder et de mettre à jour les fichiers que vous aurez modifiés.
 ! Message de : Tlem
Si vous prenez nos remarques/critiques non constructives et que vous trouvez l'accueil glacial, je serais curieux de vous voir proposer vos UDFs sur le forum US et de lire ce qu'il s'y passera
Comme vous le dites, le ridicule ne tue pas, mais il rend souvent les gens méchants ou agressifs (des deux cotés), ce qui n'a pas été le cas coté modération sur le forum Fr. :bisou:


Edit : mikell à répondu pendent que je rédigeais mon message. Mais je pense avoir exprimé l'idée générale comme de quoi certaines fonctions nous paraissent ridicules aux vues de leur utilités.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Jeep
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 24 janv. 2019 16:34
Localisation : Belgique
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#9

Message par Jeep »

Bonjour Tlem et aussi Mikell,

Tlem votre réponse m'éclair beaucoup mieux sur votre soucis d'éviter les codes inutiles et sans une bonne valeur ajoutée, vos amis anglophone m'ont également fait la remarque de façon tout à fait aussi aimable. D'autre part, je vous remercie pour les informations sur la gestion des raccourcis.

Mikell votre réponse du style de la création de la fonction"Add", a éveillez chez moi une interprétation du style "Votre travaille est ridiculement ..., mettez le à la poubelle". Le renvoyer aux "Regex" et à l'étude d'Autoit mon fait dire, que vous n'aviez pas lu mon UDF sur les strings. Puisque que je les utilise parfois et que j'avais bien fait attention à proposer des fonctions qui n'existaient pas en standard dans Autoit (Donc j'avais du lire la doc). Je comprends bien que dans le feu de l'action on peu prendre des raccourcis, mais par écrits ce sera en principe lu. Restons en là, on n'en parle plus, la vie continue.

Pour les fonctions consoles, je les utilises depuis quelques dizaines d'années et quelques secondes par ci par la çà fait des heures et avec _CW_FMT j'ai souvent gagné plusieurs dizaine de minutes sur mes propres développements. Je pensais qu'elle pouvais aider et j'ignorais cette notion de fonction "Valuable for the community". Donc je propose de la retirer de la circulation. Y-a-il moyen de retirer la publication tout simplement ou j'efface le contenu de ma publication, mais cela laissera un message vide.

Pour la manipulation sur les strings, j'ai modifié l'UDF en tenant compte des remarques de nos amis anglophones et laissé les routines qui me semblaient apporter un plus.

Merci pour vos aides.
Un problème complexe peut souvent se découper en problèmes simples. Mais où est la scie ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11772
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#10

Message par Tlem »

Jeep a écrit :Y-a-il moyen de retirer la publication tout simplement ou j'efface le contenu de ma publication, mais cela laissera un message vide.
Bonjour Jeep.
Vous pouvez à loisir supprimer vos messages, mais sachez qu'en ce qui nous concerne (l'équipe du forum), les seuls messages qui sont déplacés dans la zone 31 du forum, sont ceux qui ne présentent strictement aucun intérêt à la communauté de part leur nature injurieuse ou publicitaire, tous les autres messages tel que certains coups de gueule, boulettes ou autre messages que parfois on aimerais voir disparaitre, sont conservés pour ne pas oublier et pour montrer que chacun et libre de s'exprimer dans le respect des règles du forum. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#11

Message par mikell »

Jeep a écrit :Mikell votre réponse du style de la création de la fonction"Add", a éveillez chez moi une interprétation du style "Votre travaille est ridiculement ..., mettez le à la poubelle". Le renvoyer aux "Regex" et à l'étude d'Autoit mon fait dire, que vous n'aviez pas lu mon UDF sur les strings. Puisque que je les utilise parfois et que j'avais bien fait attention à proposer des fonctions qui n'existaient pas en standard dans Autoit (Donc j'avais du lire la doc)
Hmm. Je vois qu'apparemment je n'ai pas assez détaillé mon commentaire. Tâchons d'etre précis cette fois

Exemple où une seule ligne de code (compréhensible par tous) est d'un meilleur usage :
_StringAppend => $txt &= (($txt = "") ? "" : "|") & $string
notez l'emploi de l'opérateur ternaire, très utile à connaître pour économiser des lignes :wink:

Exemple de réinvention de roue qui ne passe pas :
_StringJoinArray (_ArrayToString existe)

Exemple où il vaut mieux utiliser un regex (for educational purpose comme ils disent)
_StringIsStartingWith => StringRegExp($txt, '^\Q' & $string & '\E')
notez au passage
- la séquence \Q...\E qui remplace avantageusement une fonction __StringRegexLiteral
- que comprendre le fonctionnement du bazar ouvre des perspectives :
Par exemple, si on remplace le pattern par : '\Q' & $string & '\E$' , surprise : on obtient _StringIsEndingWith
Et si en plus on insère un \s* là où il faut, on peut s'abstraire d'espace(s) leading/trailing
... and much more

Et la liste ci-dessus n'est pas exhaustive

Cela fait un certain nombre de fonctions qui pourraient (devraient ?) être retirées du pack
Pour celles que vous souhaitez conserver, optimisez-les et surtout vérifiez-les !
Exemple :
$s = "mikell-ange@free.fr"
Msgbox(0,"", _StringIsDataType($s, 1) ) ; réponse = false ?!

$s = "mikell@je.suis.absent.pour.le.moment.merci.de.bien.vouloir.patienter"
Msgbox(0,"", _StringIsDataType($s, 1) )  ; réponse = true ?!

C'est quand même dommage qu'il ait fallu que sur le forum US JLogan vous fasse les mêmes remarques (un poil plus diplomatiquement que Tlem, certes :mrgreen: ) pour que vous ayez enfin pu accéder à un très sain sens des réalités
Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Jeep
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 24 janv. 2019 16:34
Localisation : Belgique
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#12

Message par Jeep »

Merci mikell,

Donc nous laisserons le sujet, il servira peut être au autres apprentis écrivain d'UDF sur comment aborder le contenu après en avoir appris la forme :wink: .
Un problème complexe peut souvent se découper en problèmes simples. Mais où est la scie ?
Jeep
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 24 janv. 2019 16:34
Localisation : Belgique
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#13

Message par Jeep »

Merci Mikell pour tout ces éclaircissements.

Venant principalement de la branche "iif" et il y a très longtemps "?:" en C, je n'avais pas découvert l'opérateur ternaire en Autoit.

Donc dans mon prochain UDF hypothétique sur le calcul je vais pouvoir écrire les fonctions Min et Max. Horreur, elles esxistent déjà. :D , tout comme la fonction _ArrayToString(). A force de courir le nez dans le guidon "String", on ne regarde pas toujours plus loin.

L'opérateur de gestion des litéraux dans les Regex est certes un plus. Je vais les utiliser dans mes futures versions.

Quant à _StringIsDataType() j'étais certain qu'elle n'était pas "bullet proof" d'où mes précautions dans la présentation de la fonction et son placement dans les "internal use". Je vais la retirer et sas doute la proposer dans une discussion plus générale avant de la mettre peut-être dans un UDF.
C'est quand même dommage qu'il ait fallu que sur le forum US JLogan vous fasse les mêmes remarques (un poil plus diplomatiquement que Tlem, certes :mrgreen: ) pour que vous ayez enfin pu accéder à un très sain sens des réalités


Pas du tout, c'est l'aimable réponse de Tlem appuyé par la remarque de JLogan qui ont calmé ma première réaction et mon fait comprendre ce que vous attendiez d'un UDF de qualité.

En vous remerciant encore pour vos conseils.
Un problème complexe peut souvent se découper en problèmes simples. Mais où est la scie ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#14

Message par mikell »

Pas de souci Image

NB : pour les UDF à venir, je préconise vivement de ne pas lésiner sur la documentation
Par exemple, pour valider une adresse email, un regex actuellement admis en accord avec la norme RFC 5322 est :

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
:mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Jeep
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 24 janv. 2019 16:34
Localisation : Belgique
Status : Hors ligne

Re: [UDF] ConsoleWrite et MsgBox simply

#15

Message par Jeep »

Bonjour Mikell,

Petite remarque sans grande importance : l'expression que vous reprenez dans votre message ne passe pas dans le petit outil Online que j'utilise de temps en temps Evaluation et examen d'expressions régulières.

Je propose même mieux pour valider les emails compatibles RFC822 :

Code : Tout sélectionner

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*))*)?;\s*)
Expression reprise dans la source suivante Discussion sur les expressions régulières..

Je suis du même avis que l'auteur, nous obtenons quelque chose qui fonctionne.
Mais le résultat est totalement illisible à mon niveau, donc gros problème pour la maintenance des applications.
La taille de l'expression 6,2kb, sans doute générée par une application, sous Autoit, nous obligerait à la décomposer en plus ou moins 60 lignes pour la visualiser dans SciTE.

Après quelques recherches. je dois admettre que valider une adresse Email ne semble pas être si trivial. Une bonne réflexion s'impose. Veut-on valider à 100% des adresses Email (expression ci dessus) ?

Veut-on s'assurer que l'utilisateur final n'a pas commis une erreur, en introduisant une autre infos que l'email demandé ? De toute façon une adresse Email syntaxiquement correcte, n'existe pas nécessairement.
Un problème complexe peut souvent se découper en problèmes simples. Mais où est la scie ?
Répondre