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.

nithi
sumber
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, ""));

Petar Ivanov
sumber
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, '');
Lakshmana Kumar D
sumber
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).

Camar
sumber
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.

Thiago Moraes
sumber
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 '';
}
Mozfet
sumber
Anda lupa mendeklarasikan regdalam fungsi pertama Anda.
Noman Ali
6

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

str.replace(/[^\w ]/, '')
tertidur
sumber
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

Shrinivasan
sumber
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 '';
}
hassanf1
sumber
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));

sudheer nunna
sumber
-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.

Gaurav Agrawal
sumber
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