Skip to content

Instantly share code, notes, and snippets.

@sindresorhus
Created February 4, 2013 09:16
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save sindresorhus/4705780 to your computer and use it in GitHub Desktop.
Save sindresorhus/4705780 to your computer and use it in GitHub Desktop.
function stripAccents(str) {
var reAccents = /[àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]/g;
var replacements = 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY';
return str.replace(reAccents, function (match) {
return replacements[reAccents.source.indexOf(match)];
});
};
@sindresorhus
Copy link
Author

stripAccents('àá');
// aa

@beaulac
Copy link

beaulac commented Jan 23, 2017

Just a heads up, this has an off-by-one bug:
reAccents.source is

"[àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]"

So:

stripAccents('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ')
// aaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUYundefined'

Simple/hacky fix: add a dummy character prefix to replacements:

function stripAccents(str) {
    var reAccents = /[àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]/g;

    // Prefixed with some char to avoid off-by-one:
    var replacements = '_aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY';

    return str.replace(reAccents, function (match) {
        return replacements[reAccents.source.indexOf(match)];
    });
};

stripAccents('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ')
// 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment