Usuń wszystkie znaki specjalne z wyjątkiem spacji z łańcucha za pomocą JavaScript

Chcę usunąć wszystkie znaki specjalne z wyjątkiem spacji z łańcucha za pomocą JavaScript.

Na przykład, abc's test#s powinien wyjść jako abcs tests.

Author: Thomas Orlita, 2011-07-02

8 answers

Należy użyć funkcji string replace, z pojedynczym wyrażeniem regularnym. Zakładając przez znaki specjalne, masz na myśli wszystko, co nie jest literą, oto rozwiązanie:

var str = "abc's test#s";
alert(str.replace(/[^a-zA-Z ]/g, ""));
 202
Author: Petar Ivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-02 05:01:55

Możesz to zrobić podając znaki, które chcesz usunąć:

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

Alternatywnie, aby zmienić wszystkie znaki z wyjątkiem cyfr i liter, spróbuj:

string = string.replace(/[^a-zA-Z0-9]/g, '');
 67
Author: Lakshmana Kumar D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 16:49:51

Pierwsze rozwiązanie nie działa dla żadnego alfabetu UTF-8. (Będzie wyciąć tekst, taki jak Привіт). Udało mi się stworzyć funkcję, która nie używa RegExp i korzystać z dobrej obsługi UTF-8 w silniku JavaScript. Idea jest prosta, jeśli symbol jest równy wielkimi i małymi literami, jest to znak specjalny. Jedynym wyjątkiem jest spacja.

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;
}

Update: Należy pamiętać, że to rozwiązanie działa tylko dla języków, w których są małe i duże litery. W języki takie jak Chiński, to nie zadziała.

 23
Author: Seagull,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 22:03:29

Wypróbowałem bardzo kreatywne rozwiązanie firmy Seagul, ale okazało się, że cyfry traktowane są również jako znaki specjalne, które nie odpowiadały moim potrzebom. Więc oto mój (failsafe) tweak rozwiązania Seagul...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}
 8
Author: Mozfet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-26 16:14:45

Nie znam JavaScript, ale czy nie jest możliwe użycie regex?

Coś w rodzaju [^\w\d\s] dopasuje wszystko oprócz cyfr, znaków i spacji. To byłoby tylko pytanie, aby znaleźć składnię w JavaScript.

 6
Author: Thiago Moraes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-02 18:23:42

Search all not (word characters / / space):

str.replace(/[^\w ]/, '')
 3
Author: dovid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-24 19:12:44

Dot (.) nie mogą być uważane za specjalne. Dodałem warunek OR do odpowiedzi Mozfeta & Mewa:

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}
 0
Author: hassanf1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 07:54:02

Którego znaki specjalne chcesz usunąć z ciągu znaków, przygotuj ich listę, a następnie funkcję zamiany javascript użytkownika, aby usunąć wszystkie znaki specjalne.

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

Lub można uruchomić pętlę dla całego łańcucha i porównać pojedynczy pojedynczy znak z kodem ASCII i zregenerować nowy łańcuch.

 -7
Author: Gaurav Agrawal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-02 04:58:05