Comme je le disais dans un précédent message, cette expression régulière (en format PCRE étendu "/x" où tous les blancs non marqués par un "\" ne sont pas significatifs) fait le job d'analyse:
^ (?: (?:\+|00|011)[\.\/\-\ \t]* (?# group 1: country code after international dialing code) ([17]|2(?:[07]|[1-689]\d)|3(?:[0-4679]|[578]\d)|4(?:[013-9]|2\d)|5(?:[1-8]|[09]\d)|6(?:[0-6]|[789]\d)|8(?:[1246]|[035789]\d)|9(?:[0-58]|[679]\d)) [\.\/\-\ \t]* | (?# group 2: single-digit country code without international dialing code) ([17]) [\.\/\-\ \t]+(?# a separator is required for disambiguation) )? (?# group 3: area code between parentheses, optional) (?:\((\d{1,4})\)[\.\/\-\ \t]*)? (?# groups 4-7: leading groups of digits, may be empty) (?:(\d{1,6})[\.\/\-\ ])? (?:(\d{1,6})[\.\/\-\ ])? (?:(\d{1,6})[\.\/\-\ ])? (?:(\d{1,6})[\.\/\-\ ])? (?# group 8: start of the last group of digits, may be empty) (\d{0,10}?) (?# group 9: up to 4 digits at end of the last group of digits) (\d{1,4}+) (?: [\.\/\-\ \t]*e?xt?[\.\/\-\ \t]*+ (?# group 10: extension code, optional) (\d{1,14}) )? $ Testée sur https://regex101.com/r/4wY5xA/48 (avec des exemples inclus), et utilisée sur Wikidata (où elle détecte les formats réellement incorrects ou ambigus). Notes: * Le groupe de capture 9 est un cas spécial juste destiné à la protection de la vie privée (pour masquer une partie des chiffres à la fin du dernier groupe précisé, jusqu'à 4 chiffres. On peut le supprimer de l'expression régulière et ses chiffres sont alors inclus dans le groupe 8, le groupe 10 pour "l'extension" devient le groupe 9. * La syntaxe "(?# ... )" indique un commentaire (non-significatif pour l'analyse du texte source). * La syntaxe "(?: ... )" indique un groupement logique pour une sous-expression qui n'est inclus dans aucun groupe de capture, au contraire de "( ... )" qui en plus crée un groupe de capture, numéroté automatiquement à chaque occurrence d'une parenthèse initiale (non-marquée par un drapeau "(?" suivi immédiatement d'un symbole spécial). * La syntaxe "{1,4}+" ou "{0,10}?" ou "*+" peut sembler "étrange" pour ceux qui ne la connaissent pas, mais n'est ni une erreur de syntaxe, ni un non-sens : c'est la façon d'indiquer (en syntaxe PCRE ou Perl) qu'une répétition est possessive/"dévoreuse" ("greedy" en anglais) avec le drapeau "+"ajouté après le quantificateur de base ("?", "*", "+", "{n}", "{m,n}"), ou non-possessive avec le drapeau "?" ajouté; cela permet d'indiquer explicitement de quel côté (entre la sous-expression répétée et la sous-expression de la suite, dont la première a des suffixes facultatifs possibles qui sont communs aux préfixes facultatifs possibles pour la seconde) les caractères trouvés seront inclus dans les groupes de capture de part et d'autre du quantificateur de répétition ; c'est utile uniquement dans ce cas-là, pour lever explicitement l'ambiguïté en fixant une priorité et autorisant ou interdisant les retours en arrière ; ces drapeaux ne changent pas les valeurs bornes du nombre de répétition. Dans les autres cas, ces drapeaux n'ont aucun effet. * Les répétitions non-possessives (avec "?") sont un plus coûteuses en performance car le moteur d'expression régulière doit conserver dans une pile un point de retour en arrière pour explorer les cas suivants, chaque élément en pile contenant la liste des noeuds actifs dans le graphe NFA et la valeur des compteurs de répétition). Habituellement un moteur d'expression régulière est possessif par défaut (parfois c'est le contraire, ou c'est indiqué par un drapeau de mode global) et il s'arrête à la première correspondance trouvée, mais il ne revient alors pas en arrière (pour explorer depuis un autre caractère avant le dernier inclus dans une correspondance trouvée); mais avec ces drapeaux ajoutés aux répétitions, le moteur peut changer *localement* ce comportement pour certaines répétitions et pas d'autres. Le jeu. 23 avr. 2020 à 15:28, deuzeffe <opensm....@deuzeffe.org> a écrit : > Le 23/04/2020 à 08:52, Yves P. a écrit : > > > A moins qu'il existe déjà dans Osmose une bibliothèque pour reformatter > > les n° de téléphone ? > > Il y a une analyse sur les n° de tel dans osmose, oui. Faut juste que tu > la retrouves :P > > -- > deuzeffe > > _______________________________________________ > Talk-fr mailing list > Talk-fr@openstreetmap.org > https://lists.openstreetmap.org/listinfo/talk-fr >
_______________________________________________ Talk-fr mailing list Talk-fr@openstreetmap.org https://lists.openstreetmap.org/listinfo/talk-fr