JavaScript kullanarak bir dizeden boşluk hariç tüm özel karakterleri kaldırın


158

JavaScript kullanarak bir dizeden boşluk hariç tüm özel karakterleri kaldırmak istiyorum.

Örneğin, abc's test#s çıktı olarak vermelidir abcs tests.


3
Özel karakteri nasıl tanımlıyorsunuz?
Keith Irwin

Yanıtlar:


350

Dize değiştirme işlevini tek bir normal ifadeyle kullanmalısınız. Özel karakterlere göre, mektup olmayan bir şey demek istersiniz, işte bir çözüm:

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


5
Latin olmayan alfabesi bu çözüm kullanmak için kontrol edin bu cevabı dışarı
efkan

Bu aynı zamanda sayısal karakterleri de kaldıracak!
tech_geek

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

2
Aslında bu str.replace(/[^a-zA-Z0-9 ]/g, "");bildirime ihtiyacınız var 0-9 ve]
Ammar Shah

Biraz tweak gerekiyor, / veya - karakterlerini ve camelCase'in ilk karakterini küçük harfle, ancak bu büyük harfle kaldırmadı.
Sansun

133

Kaldırmak istediğiniz karakterleri belirterek bunu yapabilirsiniz:

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

Alternatif olarak, sayılar ve harfler dışındaki tüm karakterleri değiştirmek için şunları deneyin:

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

4
bunu kullanarak alanı kaldırmak istemezsem ne olur? /[^a-zA-Z0-9]/g
aadi1295

8
Boş yer tutabilmek için bunu beyaz listedeki karakterlere ekleyin. normal ifadeniz "/ [^ a-zA-Z0-9] / g" olacaktır (9'dan sonra boşluklara dikkat edin)
Crhistian Ramirez

1
Bir boşluk gerekiyorsa işe yarayan cevap buydu.
Nathan

bu yerine ()ve whitespacesdize.text().replace(/[ ()]/g, '')
C Alonso C Ortega

30

İlk çözüm herhangi bir UTF-8 alfabesi için çalışmaz. (Привіт gibi metinleri keser). RegExp kullanmayan ve JavaScript motorunda iyi UTF-8 desteği kullanan bir işlev oluşturmayı başardım. Bir sembol büyük harf ve küçük harf özel ise, basit bir fikirdir. Tek istisna boşluk için yapılır.

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

Güncelleme: Lütfen bu çözümün yalnızca küçük ve büyük harflerin bulunduğu diller için çalıştığını unutmayın. Çince gibi dillerde, bu işe yaramaz.

Güncelleme 2: Bulanık bir arama üzerinde çalışırken orijinal çözüme geldim. Arama işlevini uygulamak için özel karakterleri de kaldırmaya çalışıyorsanız, daha iyi bir yaklaşım vardır. Size yalnızca Latin karakterlerinden dize üretecek herhangi bir harf çevirisi kitaplığı kullanın ve daha sonra basit Regexp özel karakterleri kaldırmanın tüm sihrini yapacaktır. (Bu Çince için de işe yarayacak ve Tromsø== yaparak yan avantajlar elde edeceksiniz Tromso).


Bu oldukça yaratıcı çözüm için teşekkür ederim. Birçoğumuz "Привіт" veya "æøå" özel karakterlerini dikkate almadığımız için, dillerin gerçekte nasıl çalıştığına çok daha uygundur. Çoğu çözüm İngiliz alfabesinin bir parçası olmayan herhangi bir karakteri kesti.
Alex Langberg

1
Benim için neredeyse mükemmel bir cevap, ama maalesef Çince karakterleri özel karakterler olarak görüyor.
Eric Majerus

@EricMajerus ve Hintçe de
programcı

Dikkatli olun, bu sayıları özel karakterler olarak da kabul eder.
just_user


8

Seagul'un çok yaratıcı çözümünü denedim, ancak sayıları da ihtiyaçlarıma uygun olmayan özel karakterler olarak gördüm. İşte Seagul'un çözümünde (başarısız) ince ayarım ...

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

regİlk işlevinizde beyan etmeyi unuttunuz .
Noman Ali

6

tümünü ara (kelime karakterleri || boşluk):

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

1

Bunu kullanmaya çalışın

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

burada ^ karat, [a-zA-Z0-9_] kelime karakterleri için \ w ve boşluk için \ s / global için [] / gi içindir.


0

nokta (.) özel kabul edilemez. Mozfet'in ve Seagull'ın cevabına OR koşulu ekledim:

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

Bir dizeden kaldırmak istediğiniz özel karakterleri, bir listesini hazırlayın ve daha sonra tüm özel karakterleri kaldırmak için kullanıcı javascript değiştirme işlevi.

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

veya bütün bir dize için döngü çalıştırabilir ve tek bir karakteri ASCII kodu ile karşılaştırabilir ve yeni bir dize oluşturabilirsiniz.


9
Hayır, lütfen yapma. Gerçekten çok yavaş. Normal bir ifade kullanmak çok, çok daha iyidir.
Keith Irwin

Bu çözüm, sadece bir karakteri değiştirmek için çok güzel. Benim durumumda yardımcı oldu, teşekkürler.
Vahid Najafi

Değiştirme yöntemini birçok kez kullanmak yerine, lütfen yalnızca normal ifadeleri kullanarak bir kez kullanın.
FAISAL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.