Appuyez sur “Entrée” pour passer au contenu

Qu est ce qu un caractère alphanumérique

Un Mouette rieuse cerclé d’un anneau plastique alphanumérique qui facilite la lecture à distance.

Les caractères alphanumériques sont un sous-ensemble de caractères qui comprennent les alphabétiques représentant les lettres (de A à Z dans l’alphabet latin) minuscules et majuscules, ainsi que les caractères numériques comprenant les chiffres arabes (de 0 à 9).

A ne pas confondre avec les caractères alphaphonétiques qui définissent les 26 sons attribués aux lettres de l’alphabet.

Les caractères avec diacritiques comme le é ou le ä, ainsi que les lettres supplémentaires, sont des caractères d’alphabets étendus et ne sont généralement pas inclus[réf. nécessaire] dans l’ensemble des caractères alphanumériques.

Les caractères de ponctuation comme le point ou la virgule ne sont pas des caractères alphanumériques, puisqu’ils sont des caractères de ponctuation.

En informatique et en gestion de bases de données, le type alphanumérique comprend tous les caractères, mais exclut les calculs sur ce type.

En kabbale occidentale comme en informatique, chaque lettre de l’alphabet (1-26) correspond à une valeur alphanumérique. Cependant les valeurs attribuées à chaque lettre varient d’une tradition à l’autre.

Pour tester une chaîne alphanumérique, nous pouvons nous servir des expressions rationnelle.

PCRE, une expression régulière qui vérifie qu’une chaîne contient uniquement des caractères alphanumériques, ressemblerait à ceci :

#^[:alnum:]$#

A noter : [:alnum:] correspond à [A-Za-z0-9], donc [:alnum:] est une constante qui propose tous les caractères alphanumériques.

Dans les ordinateurs conçus pour les utilisateurs de langue anglaise, les caractères alphanumériques regroupent les 26 lettres de l’alphabet (de A à Z) et les 10 chiffres arabes (de 0 à 9).

Parfois, ce jeu de caractères alphanumériques englobe les minuscules, les majuscules, les signes de ponctuation et les symboles comme @, &, et *. Pour les autres langues que l’anglais, les caractères alphanumériques comprennent des variantes de lettres, par exemple « é » ou « ç ». 

Pour certaines utilisations informatiques comme les noms de fichiers, les caractères alphanumériques sont strictement limités aux 26 caractères alphanumériques anglosaxons et aux 10 chiffres. Pour d’autres usages, par exemple en programmation, d’autres symboles sont parfois autorisés.

Caractère alphanumérique : à quoi sert-il ?

Caractère alphanumérique : à quoi sert-il ?

Si l’on connaît l’alphabet de la langue française et des autres pays, dans le monde de l’informatique, les données se transmettent de la même manière. On utilise des lettres et d’autres symboles comme mode d’expression.

Le caractère alphanumérique est le terme pour les qualifier. Découvrons-le ensemble !

Qu’est-ce que les caractères alphanumériques ?

Si l’appellation paraît un peu compliquée, rassurez-vous car les caractères alphanumériques ne sont rien d’autre que les lettres alphabétiques et numériques en langage informatique. Si vous tapez ‘A’ et ‘1’ sur votre clavier, vous faites déjà de la saisie alphanumérique. Bien sûr, l’explication ne tient pas uniquement dans ces données simples, et le caractère alphanumérique comprend aussi d’autres écritures comme les accents et les majuscules.

Si l’utilisateur lambda se sert de l’alphanumérique tous les jours, en réponses de mail ou en tapant une phrase dans un moteur de recherche, on observe aussi une autre fonction à ce genre de caractères qui est le code. On parle de code pour les mots de passe par exemple. Il n’est pas rare de devoir inscrire une lettre en majuscule, un numéro et un symbole dans le code requis sur l’ordinateur.

Cette forme de cryptage permet de renforcer la sécurité du mot de passe et de préserver des données personnelles ou autres.

En informatique, la saisie simple sur le clavier utilise le caractère alphanumérique, qu’il soit en mode ‘azerty’ ou ‘qwerty’ :

  • Du côté des Français, la fonction alpha se fait très facilement puisque les accents sont déjà prévus sur les touches numériques. On peut donc se servir des lettres et des chiffres pour écrire un mot de passe alphanumérique.
  • En anglais, le clavier se présente différemment et montre plus de symboles à la place des accents. Au besoin, pour taper des réponses qui nécessitent exceptionnellement l’ajout de lettres avec une cédille ou un accent circonflexe, il est possible de créer le caractère alpha avec une manipulation code + lettre.
  • Pour l’utilisation des chiffres uniquement, si le clavier comprend un pavé numérique, il suffit de taper dessus, ou sinon on active la touche ‘Min/Maj’ avec la touche qui contient le chiffre souhaité.
  • D’une marque à l’autre, et selon le pays, l’ordinateur propose des fonctionnalités universelles, mais les saisies peuvent se faire de manière différente. On pense aux caractères spéciaux qui ne sont pas placés sur les mêmes touches sous Windows ou IOS.

C’est quoi un mot de passe alphanumérique ?

En langage informatique, le classement alphanumérique est aussi utilisé en termes de codification et de création de mot de passe. Il faut bien faire la distinction entre la requête d’un code personnel et le mot de passe alphanumérique.

READ  6 rue des lilas

Si le premier est tout à fait libre de ne contenir que des lettres ou que des chiffres, le second exige de coupler le numérique avec un caractère alpha et d’insérer au moins une majuscule dans les données.

En réponse au questionnement que l’on peut se poser sur l’utilité de fonctionner ainsi et pourquoi le système demande de créer un mot de passe de la sorte : la sécurité est au cœur de la démarche. Vous n’êtes pas sans savoir que la protection des données est prise très au sérieux et que l’on observe de plus en plus de sites ou d’applications qui obligent à se servir d’un mot de passe alphanumérique.

De ce fait, on trouve plus un code qu’une expression réelle, ce qui permet de limiter les réponses trop personnelles avec des dates de naissance ou le prénom de son chien. La longueur du mot de passe contient souvent un minimum de 8 lettres et/ou chiffres et symboles.

Comment utiliser les lettres et données alphanumériques en informatique ?

Si le profil le plus courant pour l’utilisation des caractères alphanumériques se trouve dans le simple fait de taper les lettres de l’alphabet sur son clavier, l’expression peut aussi se faire à travers des codes de programmation.

Pour cela, il faut faire partie de la grande sphère de l’informatique et avoir recours aux méthodes de programmation bien plus poussées que des réponses basiques en mode alpha.

Le caractère alphanumérique se transforme alors entre les mains expertes de l’informaticien pour devenir une série de codes incompréhensible pour un spectateur novice. Dans ce cas, il a même la possibilité d’inclure des caractères spéciaux. Ce type de saisie est complètement différente et se distingue dans une catégorie professionnelle.

En modalité d’expression courante, le caractère alpha ou numérique est la plupart du temps utilisé pour la nomination de fichiers informatiques, qui n’autorisent pas l’insertion d’autres caractères tels que la ponctuation ou autre symbole. Pour inscrire une date dans le nom d’un dossier, le trait d’union est toléré alors que le barre verticale ne l’est pas. Par contre, on peut jouer avec les majuscules et les accents et ajouter un chiffre aisément.

Pour ce qui est de saisir des réponses quotidiennes sur sa boîte mail, l’alphabet et le pavé numérique représentent bien la saisie d’un caractère alphanumérique.

La puissance des REGEX

  • Outils

Pour ceux qui ne savent pas ce que c’est, les expressions régulières, combinées à des fonctions de certains langages (PHP, bash, JavaScript et même HTML5 !) permettent de faire des recherches et de la reconnaissance sur des chaines de caractères. Extraire des numéro de téléphone d’une page web, ou vérifier que l’email que rentré dans un formulaire, ressemble bien à un email… C’est très puissant !

Les regex (ou regexp) intimident, cependant, la théorie n’est pas des plus complexe et il s’agit surtout de pratiquer pour gagner en expérience. Pour la pratique, le plus simple est d’utiliser un éditeur en ligne. Je recommande regex101.com car il supporte plusieurs langages (Python, Go, JavaScript et PHP) et qu’il inclut des petites fiches mémo.

En outre, pour des regex complexes, vous pouvez utiliser regexper. Il s’agit d’un site vous permettant de visualiser le fonctionnement d’une votre regex, vraiment très puissant.

Anatomie d’une REGEX

Une regex est faite pour effectuer des recherches dans les chaînes de caractères… et une regex est elle-même une chaîne de caractère.

Elle possède un délimiteur qui en indique le début et la fin ainsi que des caractères spéciaux. Les caractères spéciaux permettent d’indiquer des comportement prédéfinis. Par exemple désigner un sensemble caractères, indiquer la longueur d’un mot, une longueur variable, indiquer qu’on ne veut que des majuscules, un mot optionnel etc.

Une fois la regex créé, chaque langage de programmation dispose de ses propres fonctions pour les utiliser. Certaines fonctions permettent de contrôler la présence de certains éléments dans une chaîne, de la nettoyer en supprimer certains éléments ou encore d’extraire du texte depuis une chaîne.

Par exemple, la REGEX /[0-9]+ ans/ permet de matcher l’âge dans une chaîne. Si on veut extraîre cette information depuis une chaîne de caractère, voici comment on peut faie en PHP et JavaScript.

<?php$text = 'Je suis un licornet de 20 ans';$regex = '/[0-9]+ ans/';preg_match($regex, $text, $match);var_dump($match);// outputarray(1) { [0]=> string(6) "20 ans"}
const text = 'Je suis un licornet de 20 ans';const regex = /[0-9]+ ans/;const match = text.match(regex);console.log(match); // ["20 ans"]

L’objectif ici n’est cependant pas de vous apprendre à vous utiliser les regex dans un langage particulier mais de vous expliquer les regex en elles-mêmes.

POSIX et PCRE

Lorsque l’on parle de REGEX, il faut savoir qu’on peut rencontrer différentes variantes. En effet, certains masques ne fonctionneront pas forcément sur toutes les plate-formes et dans tous les langages.

POSIX est un standard qui a cherché à uniformiser les syntaxes et les fonctionnalités des expressions régulières. Les expressions de type POSIX seront plutôt bien supportées dans la console Linux par exemple.

READ  Promesse de l aube résumé

Cependant, leur support étendu (le reste étend commun avec PCRE) est plus restreint, notamment les classes POSIX dont je parle dans l’article. PHP ne supporte par exemple plus la syntaxe POSIX dans ses dernières versions.

PCRE désigne un type de REGEX qui s’appuie sur la syntaxe des REGEX du Perl. C’est la syntaxe la plus largement supportée aujourd’hui, bien que selon les langages et les implémentations, certaines légères différences puissent apparaitre.

Cependant, pas d’inquiétude, tout ce que nous allons voir ici fait partie des standards adoptés par la majorité des langages. Vous n’aurez donc aucun problème pour adapter vos REGEX à vos cas particuliers.

Délimiteurs

#, %, / etc.

Ils servent à délimiter ce qui fait parti de votre expression, de ce qui n’en fait pas parti. C’est donc en dehors des délimiteurs que vous placerez les options PCRE, POSIX n’ayant pas d’options, ni de délimiteurs d’ailleurs. Le choix du délimiteur est totalement libre (dans la mesure où c’est un caractère spécial), cependant, prenez un caractère assez rare. Inutile de tenter d’utiliser un slash “/“ si vous pensez travailler sur des URL…

Les métas-caractères

Ces caractères ont chacun une signification spéciale dans les expressions régulières. C’est notamment eux qui font la force des REGEX.

SigneSignificationExemple^marque un début chaine/^music/ (commence par music)$marque une fin de chaine/^music$/ (commence et termine par music)&vert;connecteur logique ou/music &vert; musique/ (music ou musique).tous les caractères sauf les retour charriot n (il faut pour ça utiliser l’option s)/./ (match presque tout)caractère d’échappement/?/ (signifie que le “?” compte ici comme un caractère normal)

Note : tous les métas-caractères doivent être échappés. Nous ne les avons pas encore abordés, mais les quantificateurs, les parenthèses qui précisent le nombre et les crochets qui marquent les classes de caractères sont aussi des métas-caractères qu’il convient d’échapper. Par ailleurs, l’antislash d’échappement doit aussi être échappé par… lui même.

Quantificateurs

Les quantificateurs permettent de préciser le nombre de fois que l’on autorise un caractère ou une suite de caractères à se répéter.

SigneSignificationExemple?0 ou 1 fois/bue?no/ (buno, ou bueno)+1 ou plus/bue+no/ (bueno, bueno, bueeeeeeno…)*0, 1 ou plus/bue*no/ (buno, bueno, bueeeeeeno…)( )permet d’appliquer répétition sur plusieurs signes/Ay(Ay)*/ ( Ay, AyAy, AyAyAyAyAyAy…){ }préciser le nombre de répétitions* /Ay(Ay){3}/ (AyAyAyAy)* /Ay(Ay){1-4}/ (AyAy, AyAyAy […] AyAyAyAyAy)* /Ay(Ay){3,}/ (AyAyAyAy ; AyAyAyAyAy ; etc)

Vous l’avez peut-être remarqué mais :

  • {0,1} revient à utiliser ?
  • {1,} revient à utiliser +
  • {0,} revient à utiliser *

Ce sont des besoins fréquents et c’est bien la raison pour laquelle ces trois raccourcis ont été créé. Vous conviendrez qu’il est plus court d’écrire ? que {0,1} !

Les parenthèses permettent ici de grouper des éléments pour leur appliquer une répétition. En plus de cela, elles sont utiles lors de l’usage du |. Ainsi, elles groupent les éléments sur lesquels porte le ou.

Par conséquent, /Buzut est le (meilleur|plus fort)/ correspond aux phrases “Buzut est le meilleur” et “Buzut est le plus fort”.

En revanche, si on omet les parenthèses, alors la regex /Buzut est le meilleur|plus fort/ correspond soit à “Buzut est le meilleur” soit à “plus fort” ; ce qui n’a rien à voir !

Classes et intervales

Les classes permettent de recherche entre plusieurs caractères différents, elles donnent des alternatives. Les intervales sont des classes un peu spéciales puisqu’elles permettent d’énumérer une certaine palette de chiffre ou de lettres. Par exemple, tous les chiffres de 0 à 5, ou toutes les lettres de a à i, sans les énumérer une par une.

SigneSignificationExemple[ ]classe de caractères/gr[oai]s/ (gros, gras ou gris)[ – ]intervalle de classe/n°[0-9]/ (n°1, n°2, […] n°9)[^ ]classe à exclure/h[^3-9]/ (h1 et h2 uniquement)

Quelques particularités : dans un classe, le tiret “-“ sert de délimiteur, donc si on veut l’inclure en tant que caractère, on doit le placer en fin de classe (ou au début). Par ailleurs, le crochet fermant “]” délimite aussi la fin de le classe, il faudra donc l’échapper par un antislash.

En revanche, les autres métas-caractères ne comptent pas dans les classes. On ne les échappe pas. Cette classe [0-9a-z?+*{}.] correspond donc à un chiffre, une lettre, un point d’interrogation, un point, un plus…

Classes abrégées

Les classes abrégées permettent, comme les classes “normales”, d’avoir de nombreuses possibilités. Elles n’apportent rien de plus en fonctionnalité que les classes normales, mais elles permettent d’écrire tout ça bien plus vite, ce sont des raccourcis ! Que diriez vous si vous pouviez taper w à la place de [0-9a-zA-Z_] ?

RaccourciSignificationdIndique un chiffre. Ca revient exactement à taper [0-9]DIndique ce qui n’est PAS un chiffre. Ca revient à taper [^0-9]wIndique un caractère alphanumérique ou un tiret de soulignement. Cela correspond à taper [a-zA-Z0-9_]WIndique ce qui n’est PAS un caractère alphanumérique ou un tiret de soulignement. Ca revient à taper [^a-zA-Z0-9_]tIndique une tabulationnIndique une nouvelle lignerIndique un retour chariotsIndique un espace blanc (correspond à t n r)SIndique ce qui n’est PAS un espace blanc (t n r).Le point indique n’importe quel caractère ! Il autorise donc tout !

READ  Sujet brevet physique chimie avec corrigé

Classes nommées

Il y a un autre type de classes toutes faites, qui permettent d’économiser un paquet de temps. Ce sont des classes nommées et comme les classes abrégées, elles permettent de faire les choses en plus court ! Elles sont relatives aux expressions régulières POSIX.

Avant de les utiliser, attention toutefois au support de POSIX.

Nom de la classeDescription[:alnum:]caractères alphanumériques (équivalent à [A-Za-z0-9])[:alpha:]caractères alphabétiques ([A-Za-z])[:blank:]caractères blanc (espace, tabulation)[:ctrl:]caractères de contrôle (les premiers du code ASCII)[:digit:]chiffre ([0-9])[:graph:]caractère d’imprimerie (qui fait une marque sur l’écran en quelque sorte)[:print:]caractère imprimable (qui passe à l’imprimante … tout sauf les caractères de contrôle)[:punct:]caractère de ponctuation[:space:]caractère d’espacement[:upper:]caractère majuscule[:xdigit:]caractère hexadécimal

Capture et références

Nous l’avons vu, les parenthèses () permettent de grouper plusieurs signes afin d’appliquer une condition, une répétition etc. Cependant, les parenthèses possèdent une autre fonction : elles sont capturantes.

Qu’est-ce que cela veut dire ? Ça veut dire qu’une expression mise entre parenthèse est automatiquement placée dans une variable à laquelle ont peut faire référence ailleurs.

On peut faire référence aux expressions capturées à deux endroits :

  • Dans la REGEX elle-même, cela s’appelle une backreference ou référence arrière. On peut ainsi sélectionner les palindromes de trois lettres (mots qui se lisent indifféremment de gauche à droite ou de droite à gauche) avec cette expression /(w)w1/.
    (w) sélectionne tout caractère alphanumérique et capture ce caractère, suivi d’un autre caractère puis du caractère précédemment capturé (donc l’expression entre parenthèses, soit la première lettre sélectionnée) :
<mark>SOS</mark> je suis fais des <mark>gag</mark> !

Il peut y avoir plusieurs backreferences dans une même expression, la première est indiquée par 1, la seconde 2 et ainsi de suite.

  • Dans le résultat retourné par la fonction invoquée. Ici, cela dépend du langage et de la fonction utilisée. Par exemple en Javascript :
const birth = 'Je suis né en 1990 à Lyon';console.log(birth.match(/^Je suis né en ([0-9]{4})/)); // ["Je suis né en 1990", "1990"]

On obtient d’abord le match global en index 0, puis dans leur sens d’apparition les résultats des groupes capturants.

Comme on ne peut en général capturer que neuf éléments (en Javascript par exemple, vous ne pourrez pas aller au delà de $9), il peut être intéressant de préciser qu’un couple de parenthèse utilisé à des fin de groupement est non capturant. Il faut pour cela placer ?: juste après la parenthèse ouvrante ex. /(?:[0-9]{4})/.

Lookahead et lookbehind

Les lookahead et lookbehind sont des types de références un peu spéciales. Elles permettent de matcher un élément en fonction de son contexte.

lookahead veut dire que l’on regarde en avant, donc on pourra sélectionner un élément en fonction de ce qu’il y a, ou n’y a pas, après lui. Le lookahead s’exprime par des parenthèses, comme les groupes de captures, mais on y ajoute la chaîne ?=. Exemple :

const birthQuent = 'Je suis Quentin et je suis né en 1990 à Lyon';const birdtRoger = 'Je suis Roger et je suis né en 1978 à Paris';const regex = /en ([0-9]{4}) (?=à Lyon)/;console.log(regex.exec(birthQuent)); // ["en 1990 ", "1990"]console.log(regex.exec(birdtRoger)); // null

Lorsqu’on sélectionne selon ce qu’il n’y a pas, on parle de lookahead négatif. Le principe est le même mais on remplace =? par =!. Comme un exemple vaut mille mots :

const birthQuent = 'Je suis Quentin et je suis né en 1990 à Lyon';const birdtRoger = 'Je suis Roger et je suis né en 1978 à Paris';const birthSixt = 'Je suis Sixtine et je suis né en 1994 à Bordeaux';const regex = /en ([0-9]{4}) (?!à Paris)/;console.log(regex.exec(birthQuent)); // ["en 1990 ", "1990"]console.log(regex.exec(birdtRoger)); // nullconsole.log(regex.exec(birthSixt)); // ["en 1994 ", "1994"]

Penchons-nous maintenant sur le lookbehind. Ce dernier fonctionne de la même manière mais il match les expressions qui sont (ou ne sont pas) précédées par ce qu’il y a dans le lookbehind. Les notations sont donc respectivement pour le positif et le négatif (?<=) et (?<!).

const alex = 'Codename 006 – Alec Trevelyan';const james = 'Codename 007 – James Bond';const regex = /(?<=007 – )([A-Z][a-z]+ [A-Z][a-z]+)/;

Inutile de vous en dire plus, vous avez parfaitement compris. Attention toutefois, le lookbehind n’est supporté en JavaScript qu’en ES2018. Il n’est donc pas encore vraiment supporté par les navigateurs. Pour langages côté serveur, aucun problème.

Options

Comme expliqué au début de l’article, les regex POSIX n’ont pas d’options, ceci est donc valable pour PCRE uniquement. En outre, tous les langages ne proposent pas forcement les mêmes options. Il vaut donc mieux se référer directement aux documentations de vos langages (PHP et JavaScript).

Conclusion

Peu importe votre domaine de programmation et le langage utilisé, tôt ou tard les regex sont l’outil qu’il vous faut. Fort de ces connaissances, vous pouvez régler à peu près tous les problèmes solvables par des regex. N’oubliez pas également que regex101 possède une bibliothèque de regex prêtes à être utilisées.

Enfin, gardez à l’esprit que de la même manière que du code, on n’obtient pas forcement la bonne solution du premier coup, alors testez !

Soyez le premier a laisser un commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *