The en dash is a typographic punctuation mark at Unicode code point U+2013, named for its traditional width -- approximately equal to the width of the capital letter N in a given typeface. It occupies a middle ground between the hyphen-minus (U+002D) and the em dash (U+2014), and has specific conventional uses that distinguish it from both.
Primary Uses
Ranges of values -- The en dash is the standard connector for numerical ranges, date ranges, and time spans:
Pages 12-24
June-August 2024
9:00 AM-5:00 PM
Temperature range: 15-20 degrees C
Connections between items of equal weight -- When two nouns or proper names are joined as a compound modifier with equal relationship:
New York-London flight
Nature-nurture debate
Lefebvre-Okonkwo theorem
Note that a hyphen would be used if one element is a single unhyphenated word, but an en dash is appropriate when either element is itself a compound or multi-word phrase.
HTML and CSS Usage
<!-- Recommended: named entity -->
–
<!-- Hex entity -->
–
<!-- Decimal entity -->
–
<!-- Direct insertion in UTF-8 document -->
Pages 12-24
/* Generate en dash via CSS content property */
.range::after {
content: ' \2013 ';
}
En Dash vs Hyphen-Minus vs Em Dash
| Character | Code Point | Name | Typical Use |
|---|---|---|---|
| - | U+002D | Hyphen-Minus | Word hyphenation, compound adjectives, negative sign |
| en dash | U+2013 | En Dash | Ranges, equal-weight connections |
| em dash | U+2014 | Em Dash | Parenthetical breaks, attribution |
| non-breaking hyphen | U+2011 | Non-breaking Hyphen | Hyphen that prevents line breaks |
Spacing Conventions
Spacing around the en dash varies by style guide:
- AP Style / US journalism: no spaces for ranges, but spaces in compound connections
- Chicago Manual of Style: no spaces in either context
- UK style: spaces around en dashes used as parenthetical dashes
Keyboard Input
macOS: Option + Hyphen
Windows: Alt + 0150 (numeric keypad)
Linux/GTK: Compose, -, -
MS Word: Type word, hyphen, word (AutoCorrect)
JavaScript String Operations
// Check for en dash in a string
const hasEnDash = str.includes('\u2013');
// Normalize typographic dashes to ASCII for data processing
function normalizeDashes(str) {
return str
.replace(/\u2013/g, '-') // en dash -> hyphen
.replace(/\u2014/g, '--') // em dash -> double hyphen
.replace(/\u2012/g, '-'); // figure dash -> hyphen
}
// Format a numeric range with proper en dash
function formatRange(start, end) {
return `${start}\u2013${end}`;
}
Accessibility
Screen readers handle en dashes inconsistently. NVDA may read the en dash as "dash" or skip it; JAWS may say "en dash." For ranges, consider using the word "to" in text alternatives or aria-label to ensure the range is communicated clearly to all users.