Перше рішення не працює для жодного алфавіту UTF-8. (Він виріже такий текст, як Їжак). Мені вдалося створити функцію, яка не використовує RegExp і використовує гарну підтримку UTF-8 в механізмі JavaScript. Ідея проста, якщо символ рівний великим, а малі - це особливий символ. Єдиний виняток зроблений для пробілів.
function removeSpecials(str) {
var lower = str.toLowerCase();
var upper = str.toUpperCase();
var res = "";
for(var i=0; i<lower.length; ++i) {
if(lower[i] != upper[i] || lower[i].trim() === '')
res += str[i];
}
return res;
}
Оновлення: Зверніть увагу, що це рішення працює лише для мов, де є малі та великі літери. У таких мовах, як китайська, це не працює.
Оновлення 2: Я прийшов до оригінального рішення, коли працював над нечітким пошуком. Якщо ви також намагаєтеся видалити спеціальні символи для реалізації функцій пошуку, є кращий підхід. Використовуйте будь-яку бібліотеку транслітерації, яка видасть вам рядки лише з латинських символів, і тоді простий Regexp виконає всю магію видалення спеціальних символів. (Це також буде працювати для китайців, і ви також отримаєте побічні переваги, зробивши Tromsø
== Tromso
).