Intermédiaire 8 min de lecture 25 janvier 2025

En dash (–) : usages, pièges et corrections

Le caractère en dash (–, U+2013) ressemble à un simple tiret, mais il n'est pas équivalent au trait d’union ASCII (-) ni au signe moins (−). Dans des slugs, des URLs, des comparaisons de chaînes, des exports CSV ou des requêtes, cette nuance provoque des résultats inattendus. Voici comment l’identifier, l’utiliser à bon escient et éviter les confusions coûteuses.

Qu'est-ce que l’en dash ?

L’en dash est un tiret de longueur moyenne utilisé notamment pour indiquer des intervalles (2019–2024) ou des relations (Paris–Lyon).

Voici les caractères souvent confondus avec l’en dash :

1 Trait d’union ASCII (hyphen-minus)

Caractère le plus répandu, utilisé pour les mots composés et les slugs.

- (U+002D), code 45

2 En dash (tiret en)

Un peu plus long que le trait d’union, très courant en typographie pour les plages de valeurs.

– (U+2013), UTF-8: E2 80 93

3 Em dash (tiret em)

Plus long que l’en dash, souvent utilisé pour les incises en rédaction.

— (U+2014), UTF-8: E2 80 94
Usage: incises, interruptions
Diffère visuellement et sémantiquement de l’en dash
À ne pas confondre avec le trait d’union

4 Signe moins mathématique

Symbole dédié au calcul, distinct du trait d’union et de l’en dash.

− (U+2212), UTF-8: E2 88 92
À utiliser pour les nombres négatifs
Éviter en slugs/identifiants

Problèmes classiques

Copier-coller depuis le web ou Word

Un en dash se glisse dans des slugs, noms de fichiers ou options CLI à la place du trait d’union ASCII.

Tests unitaires qui échouent

Une chaîne attend un "-", mais contient "–" (U+2013). Les comparaisons exactes échouent.

Slugify/normalize incomplètes

Certaines fonctions ne convertissent pas U+2013 en "-" et laissent des caractères non désirés.

Regex qui oublient U+2013

Des classes comme [-] ne couvrent pas l’en dash selon le moteur. Les correspondances ratent.

Exemple de confusion :

# Deux chaînes visuellement proches mais différentes
string1 = "2020-2021"
string2 = "2020–2021" # Contient U+2013
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre un changement d’un seul caractère sur une valeur « identique »
!
Des slugs/URLs génèrent des 404 après un copier-coller depuis un éditeur riche
!
Un tri ou une comparaison de chaînes renvoie un ordre inattendu
!
Votre recherche de "-" ne trouve pas toutes les occurrences visibles
!
Une option CLI échoue car un en dash a remplacé un simple "-"

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII identifie instantanément les en dashes et les distingue du trait d’union et du signe moins. Il signale les positions exactes et propose des remplacements adaptés selon le contexte.

✅ Détection automatique

En dash (U+2013), em dash (U+2014), minus (U+2212), hyphen (U+002D)

📊 Analyse complète

Codes Unicode, contextes d’usage, recommandations typographiques

🧹 Nettoyage automatique

Conversion vers "-" ou "−" en fonction du besoin (slug, math, texte)

💾 Export propre

Texte normalisé et prêt pour vos pipelines

Autres méthodes de détection

Affichage dans l'éditeur

Activez l’affichage des caractères non-ASCII et la mise en évidence Unicode
Utilisez des extensions qui surlignent U+2013, U+2014 et U+2212

En ligne de commande (Unix)

# Rechercher l’en dash (U+2013)
grep -nP "\x{2013}" fichier.txt
# Lister les caractères non ASCII
grep -nP "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Remplacer l’en dash par un trait d’union ASCII
sed -i 's/\xE2\x80\x93/-/g' fichier.txt
# Vérifier les octets UTF-8 (E2 80 93)
hexdump -C fichier.txt | grep "e2 80 93"

En code

JavaScript

const out = str.replace(/\u2013/g, "-")

Python

clean = s.replace("\u2013", "-")

Excel / Google Sheets

SUBSTITUE(cellule;CAR(8211);"-")

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d’écrire un script, passez votre texte dans Clean ASCII pour repérer les en dashes et appliquer la conversion adéquate :

Détection de U+2013/U+2014/U+2212
Nettoyage contextuel
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Prévoyez une table de correspondance explicite: U+2013 → "-", U+2212 → "-"/"−" selon le contexte
NFC/NFKC ne remplacent pas l’en dash: appliquez une normalisation métier dédiée
Uniformisez les fins de ligne et l’encodage (UTF-8) pour des diff stables

🧹 Filtrer

Remplacez U+2013 par "-" pour les slugs, IDs, clés, routes
Conservez l’en dash en typographie éditoriale là où c’est pertinent (plages 10–12)
Validez les entrées utilisateurs et bloquez les tirets non autorisés selon le contexte

⚙️ Automatiser

Hooks pre-commit: refuser U+2013 dans le code applicatif (autoriser dans contenu éditorial si voulu)
Tests de sanitation: mapping des tirets avant persistance et comparaison
Linting CI: détection de U+2013/U+2014/U+2212 dans les fichiers sensibles

Checklist rapide

Encodage UTF-8 et affichage des caractères non-ASCII activé dans l’éditeur
Fonction de normalisation qui remplace U+2013 par "-" selon le contexte
Règles claires: quand utiliser en dash, em dash, signe moins
Pre-commit/CI vérifiant la présence de U+2013 dans le code
Tests garantissant des slugs/URLs sans en dash non désiré
Documentation équipe sur les tirets et leurs impacts techniques

Conclusion

L’en dash est un détail typographique qui a de vrais effets techniques. Savoir le distinguer du trait d’union et du signe moins évite des bugs subtils.

Adoptez une détection systématique et une normalisation adaptée à votre contexte. Vous gagnez en robustesse, en cohérence et en lisibilité.

Repérez l’en dash dans vos textes

Utilisez notre outil pour identifier l’en dash, le distinguer des autres tirets et appliquer les remplacements adéquats.

Analyser mon texte