Skip to content

Strings

normalizeAccents

1.0.0

Removes accents and diacritical marks from a string by normalizing Unicode characters and stripping combining marks.

normalizeAccents(/str/);
  • Removes accents and diacritical marks from characters
  • Uses Unicode normalization (NFD) for accurate processing
  • Preserves original character structure while removing marks
  • Returns empty string for invalid inputs
  • Handles all Unicode combining characters
  • Simple and intuitive API
  • No side effects - does not modify original string
  • Comprehensive testing
ArgTypeDefault ValueRequired
strstring-Yes

Use the normalizeAccents() function to remove accents and diacritical marks from strings.

import { normalizeAccents } from '@inpulse-ui/utils';
const result = normalizeAccents('café');
console.log(result); // "cafe"

Handles various accented characters:

console.log(normalizeAccents('José')); // "Jose"
console.log(normalizeAccents('François')); // "Francois"
console.log(normalizeAccents('naïve')); // "naive"
console.log(normalizeAccents('résumé')); // "resume"
console.log(normalizeAccents('piñata')); // "pinata"

Works with multiple languages:

console.log(normalizeAccents('Müller')); // "Muller" (German)
console.log(normalizeAccents('Björk')); // "Bjork" (Swedish)
console.log(normalizeAccents('São Paulo')); // "Sao Paulo" (Portuguese)
console.log(normalizeAccents('Zürich')); // "Zurich" (German)
console.log(normalizeAccents('Kraków')); // "Krakow" (Polish)

Returns empty string for invalid inputs:

console.log(normalizeAccents('')); // ""
console.log(normalizeAccents(null)); // ""
console.log(normalizeAccents(undefined)); // ""
console.log(normalizeAccents(123)); // ""

Preserves non-accented characters:

console.log(normalizeAccents('Hello World')); // "Hello World"
console.log(normalizeAccents('123 ABC xyz')); // "123 ABC xyz"
console.log(normalizeAccents('!@#$%^&*()')); // "!@#$%^&*()"

International user search - creating a search function that works with accented names:

import { normalizeAccents } from '@inpulse-ui/utils';
// User database with international names
const userDatabase = [
{ id: 1, name: 'José María García', country: 'Spain' },
{ id: 2, name: 'François Müller', country: 'France' },
{ id: 3, name: 'Björn Andersson', country: 'Sweden' },
{ id: 4, name: 'Łukasz Kowalski', country: 'Poland' }
];
// Search function that handles accents
function searchUsers(query) {
const normalizedQuery = normalizeAccents(query.toLowerCase());
return userDatabase.filter(user => {
const normalizedName = normalizeAccents(user.name.toLowerCase());
return normalizedName.includes(normalizedQuery);
});
}
// Search examples
console.log(searchUsers('jose')); // Finds José María García
console.log(searchUsers('francois')); // Finds François Müller
console.log(searchUsers('bjorn')); // Finds Björn Andersson
console.log(searchUsers('lukasz')); // Finds Łukasz Kowalski
// Works with partial matches too
console.log(searchUsers('garcia')); // Finds José María García
console.log(searchUsers('muller')); // Finds François Müller

Text search and filtering:

const cities = ['São Paulo', 'México', 'Zürich', 'Kraków', 'Montréal'];
// Normalize for search comparison
function searchCities(query) {
const normalizedQuery = normalizeAccents(query.toLowerCase());
return cities.filter(city => {
const normalizedCity = normalizeAccents(city.toLowerCase());
return normalizedCity.includes(normalizedQuery);
});
}
console.log(searchCities('sao')); // ['São Paulo']
console.log(searchCities('krakow')); // ['Kraków']
console.log(searchCities('zurich')); // ['Zürich']

URL slug generation:

function createSlug(title) {
return normalizeAccents(title)
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '');
}
const blogTitles = [
'Café Culture in París',
'The Müller Family Story',
'São Paulo: A Guide'
];
const slugs = blogTitles.map(createSlug);
console.log(slugs);
// ['cafe-culture-in-paris', 'the-muller-family-story', 'sao-paulo-a-guide']

User data processing:

const users = [
{ name: 'José García', email: 'jose@example.com' },
{ name: 'François Müller', email: 'francois@example.com' },
{ name: 'María José', email: 'maria@example.com' }
];
// Create normalized search index
const searchIndex = users.map(user => ({
...user,
searchName: normalizeAccents(user.name.toLowerCase())
}));
function findUser(query) {
const normalizedQuery = normalizeAccents(query.toLowerCase());
return searchIndex.find(user =>
user.searchName.includes(normalizedQuery)
);
}
console.log(findUser('jose')); // Finds both José García and María José
console.log(findUser('francois')); // Finds François Müller

Project

Built with by Jo Santana in Brazil.

© 2026 Inpulse. All rights reserved.