Intermédiaire 8 min de lecture 25 janvier 2025

Minus sign : différences typographiques et problèmes courants

Tout semble correct, mais le script plante, la commande échoue, le slug casse. La cause ? Un minus sign confondu avec un tiret. "-" (U+002D) n'est pas "−" (U+2212). Voici ce que cela change, où ça casse et comment s'en sortir sans douleur.

Qu'est-ce que le minus sign ?

Le minus sign est le symbole de soustraction typographique U+2212 "−", différent du tiret ASCII U+002D "-". Ils se ressemblent, mais n'ont pas le même code et ne sont pas équivalents pour les machines.

Les principales familles de caractères liés au signe moins et aux tirets :

1 Tiret ASCII "hyphen-minus"

Le caractère polyvalent du clavier: options CLI, slugs, identifiants.

Hyphen-minus "-" (U+002D) — ASCII 45

2 Tirets typographiques

Utilisés en typographie, souvent copiés depuis le web ou Word.

Figure dash (U+2012), En dash "–" (U+2013), Em dash "—" (U+2014)

3 Vrais signes moins et variantes mathématiques

Caractères conçus pour les expressions numériques et scientifiques :

Minus sign "−" (U+2212)
Superscript minus "⁻" (U+207B), Subscript minus "₋" (U+208B)
Minus sign en tant qu'opérateur vs tiret comme ponctuation

4 Cas techniques autour du "moins"

Coupures de mots et tirets spéciaux qui perturbent les parsers :

Soft Hyphen "­" (U+00AD) — césure conditionnelle
Non-breaking hyphen "‑" (U+2011) — tiret insécable
Points de césure copiés depuis PDF ou pages web

Problèmes classiques

Copier-coller depuis le web ou Word

Remplace un "-" par un "−" (U+2212) ou un "–" (U+2013), ce qui casse des options CLI, des slugs ou du code.

Tests unitaires qui échouent

La chaîne contient "−" au lieu de "-" : égalités fausses, parsers numériques en échec.

Fonctions de nettoyage incomplètes

Vos remplacements ne ciblent que "-" et ignorent "−", "–", "—" et "‑".

Regex et classes [-] trompeuses

[-] ou \w ne couvrent pas "−" (U+2212) ni "–" (U+2013) selon les moteurs.

Exemple de problème courant :

# Deux chaînes visuellement identiques, mais différentes
string1 = "a-b"
string2 = "a−b" # Contient le minus sign U+2212
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git met en avant un changement d'un seul caractère autour d'un tiret
!
Des split('-') ne séparent pas correctement vos champs à cause d'un "−"
!
Une clé .env ou une option CLI échoue avec −m au lieu de -m
!
L'éditeur montre un tiret visuellement plus long ou un espacement étrange
!
Un copier-coller de commande "git commit −m" retourne "option inconnue"

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII repère immédiatement toutes les variantes de tirets et de minus sign qui se glissent dans vos textes. Vous voyez les points exacts, le code Unicode, et les remplacements proposés pour uniformiser.

✅ Détection automatique

Hyphen-minus "-", minus sign "−", en/em dashes, hyphens insécables

📊 Analyse complète

Codes Unicode, positions exactes, contexte (texte vs code)

🧹 Nettoyage automatique

Remappage intelligent vers "-" quand c'est pertinent

💾 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 invisibles et des codes Unicode à l'inspection
Utilisez une extension qui surligne "−", "–", "—" quand attendu "-"

En ligne de commande (Unix)

# Rechercher les tirets non ASCII (en/em/figure, minus sign)
grep -P "[\xE2\x80\x90-\xE2\x80\x95\xE2\x88\x92]" fichier.txt
# Visualiser les tirets et les fins de ligne
sed -n l fichier.txt
# Afficher les caractères spéciaux
cat -A fichier.txt
# Inspecter les octets (repérer E2 88 92 pour U+2212)
hexdump -C fichier.txt

En code

JavaScript

str.replace(/[\u2010-\u2015\u2212]/g, "-")

Python

import re; cleaned = re.sub(r"[\u2010-\u2015\u2212]", "-", s)

Excel / Google Sheets

=SUBSTITUE(A1; "−"; "-") et UNICODE(MID(A1; position; 1))

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d'écrire des scripts, utilisez Clean ASCII pour repérer et uniformiser tous les minus sign et tirets hétérogènes :

Détection des variantes
Remappage intelligent vers "-"
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Utilisez NFKC puis remplacez "−", "–", "—" par "-" pour les slugs et IDs
Conservez "−" (U+2212) uniquement dans un contexte mathématique rendu
Uniformisez les tirets dans les contenus (rédaction vs code) via vos linters

🧹 Filtrer

Écrivez des fonctions normalize_minus() qui remappent tous les tirets vers "-"
Supprimez les soft hyphens et remplacez "‑" par "-" si l'insécabilité n'est pas requise
Restreignez les caractères autorisés pour slugs/identifiants aux ASCII sûrs

⚙️ Automatiser

Hook pre-commit qui refuse des fichiers contenant "−", "–", "—" hors dossiers tolérés
Tests de sanitation sur les inputs utilisateurs et sur les slugs générés
Linting CI qui vérifie l'absence de tirets non ASCII dans le code

Checklist rapide

Règles de normalisation des tirets décidées (ASCII "-" par défaut)
Slugs/URLs contrôlés: aucun "−", "–", "—", "‑"
Éditeur configuré pour afficher les variantes de tirets
Fonction de remplacement globale des minus sign dans vos libs
Tests qui refusent les tirets non ASCII dans le code/CSV
Documentation interne: "-" vs "−" et cas d'usage typographiques

Conclusion

Les confusions autour du minus sign sont subtiles mais coûteuses. En distinguant clairement "-" et "−", vous évitez des heures de debug.

Détectez systématiquement les variantes, normalisez vos tirets et sécurisez vos flux texte pour des parsers et commandes fiables.

Détectez les minus sign maintenant

Utilisez notre outil pour identifier et normaliser les minus sign et tirets dans vos textes.

Analyser mes minus sign