Hapus semua karakter khusus kecuali spasi dari string menggunakan JavaScript


157

Saya ingin menghapus semua karakter khusus kecuali spasi dari string menggunakan JavaScript.

Misalnya, abc's test#s harus menampilkan sebagai abcs tests.


3
Bagaimana Anda mendefinisikan karakter khusus?
Keith Irwin

Jawaban:


349

Anda harus menggunakan fungsi ganti string, dengan satu regex. Dengan asumsi karakter khusus, Anda berarti apa pun yang bukan huruf, berikut ini solusinya:

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));


5
Untuk menggunakan solusi ini pada alfabet non-latin silahkan cek jawaban ini keluar
efkan

Ini juga akan menghapus karakter numerik!
tech_geek

15
@tech_geek dapat Anda lakukanstr.replace(/[^a-zA-Z0-9]/g, "")
Chidi Williams

2
Sebenarnya Anda perlu str.replace(/[^a-zA-Z0-9 ]/g, "");pemberitahuan ini ada ruang antara 0-9 dan]
Ammar Shah

Perlu beberapa penyesuaian, itu tidak menghapus / atau - karakter dan karakter pertama camelCase seharusnya dalam huruf kecil, tetapi yang ini dalam huruf besar.
Sansun

133

Anda dapat melakukannya dengan menentukan karakter yang ingin Anda hapus:

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

Atau, untuk mengubah semua karakter kecuali angka dan huruf, coba:

string = string.replace(/[^a-zA-Z0-9]/g, '');

4
bagaimana jika saya tidak ingin menghapus ruang menggunakan ini? /[^a-zA-Z0-9]/g
aadi1295

8
@ ArbazAbid untuk menjaga ruang hanya menambahkannya ke karakter yang terdaftar putih. regex Anda akan "/ [^ a-zA-Z0-9] / g" (perhatikan spasi setelah 9)
Crhistian Ramirez

1
Ini adalah jawaban yang berhasil, jika diperlukan ruang.
Nathan

ini menggantikan ()dan whitespacesdalam string.text().replace(/[ ()]/g, '')
C Alonso C Ortega

30

Solusi pertama tidak berfungsi untuk alfabet UTF-8. (Ini akan memotong teks seperti Привіт). Saya telah berhasil membuat fungsi yang tidak menggunakan RegExp dan menggunakan dukungan UTF-8 yang baik di mesin JavaScript. Idenya sederhana jika simbol sama dalam huruf besar dan kecil itu adalah karakter khusus. Satu-satunya pengecualian dibuat untuk spasi putih.

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

Pembaruan: Harap dicatat, bahwa solusi ini hanya berfungsi untuk bahasa di mana ada huruf kecil dan besar. Dalam bahasa seperti Cina, ini tidak akan berhasil.

Pembaruan 2: Saya menemukan solusi asli ketika saya sedang mengerjakan pencarian fuzzy. Jika Anda juga mencoba untuk menghapus karakter khusus untuk mengimplementasikan fungsi pencarian, ada pendekatan yang lebih baik. Gunakan pustaka transliterasi yang akan menghasilkan Anda hanya string dari karakter Latin dan kemudian Regexp sederhana akan melakukan semua keajaiban menghapus karakter khusus. (Ini akan bekerja untuk orang Cina juga dan Anda juga akan menerima manfaat sampingan dengan membuat Tromsø== Tromso).


Terima kasih atas solusi yang cukup kreatif ini. Ini jauh lebih sesuai dengan bagaimana bahasa sebenarnya bekerja, karena banyak dari kita tidak mempertimbangkan "Привіт" atau "æøå" karakter khusus. Sebagian besar solusi di luar sana memotong karakter apa pun yang bukan bagian dari alfabet bahasa Inggris.
Alex Langberg

1
Hampir jawaban yang sempurna bagi saya, tetapi sayangnya menganggap karakter Cina sebagai karakter khusus.
Eric Majerus

@EricMajerus dan hindi juga
programmer

Hati-hati, ini juga menganggap angka sebagai karakter khusus.
just_user

11

Saya tidak tahu JavaScript, tetapi tidak bisakah menggunakan regex?

Sesuatu seperti [^\w\d\s]akan cocok dengan apa pun kecuali digit, karakter, dan spasi putih. Itu hanya akan menjadi pertanyaan untuk menemukan sintaks dalam JavaScript.


1
stackoverflow.com/a/4374890/2384606 Ini adalah jawaban untuk pertanyaan Anda :)
Carmela

8

Saya mencoba solusi Seagul yang sangat kreatif, tetapi ternyata itu memperlakukan angka juga sebagai karakter khusus, yang tidak sesuai dengan kebutuhan saya. Jadi di sini adalah tweak saya (gagal aman) dari solusi 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 '';
}

Anda lupa mendeklarasikan regdalam fungsi pertama Anda.
Noman Ali

6

cari semua yang tidak (karakter kata || spasi):

str.replace(/[^\w ]/, '')

1

Coba gunakan yang ini

var result= stringToReplace.replace(/[^\w\s]/gi, '')

di sini ^ carat adalah untuk negasi \ w untuk [a-zA-Z0-9_] karakter kata dan \ s untuk spasi / [] / gi untuk global


0

dot (.) tidak dapat dianggap spesial. Saya telah menambahkan syarat ATAU untuk jawaban Mozfet & Seagull:

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

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

Karakter khusus yang ingin Anda hapus dari string, siapkan daftar mereka dan kemudian fungsi ganti pengguna javascript untuk menghapus semua karakter khusus.

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

atau Anda dapat menjalankan loop untuk seluruh string dan membandingkan satu karakter dengan kode ASCII dan membuat ulang string baru.


9
Tidak, tolong jangan lakukan itu. Ini sangat lambat. Jauh lebih baik menggunakan ekspresi reguler.
Keith Irwin

Solusi ini sangat bagus untuk mengganti satu karakter saja. Dalam kasus saya itu sangat membantu, terima kasih.
Vahid Najafi

Alih-alih menggunakan metode penggantian berkali-kali, harap gunakan hanya sekali menggunakan ekspresi reguler.
FAISAL
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.