ลบอักขระพิเศษทั้งหมดยกเว้นช่องว่างจากสตริงโดยใช้ JavaScript


158

ฉันต้องการลบอักขระพิเศษทั้งหมดยกเว้นเว้นวรรคออกจากสตริงโดยใช้ JavaScript

ยกตัวอย่างเช่น ควรออกเป็นabc's test#s abcs tests


3
คุณกำหนดอักขระพิเศษอย่างไร
Keith Irwin

คำตอบ:


350

คุณควรใช้ฟังก์ชั่นแทนที่สตริงด้วย regex เดี่ยว สมมติว่ามีตัวละครพิเศษคุณหมายถึงทุกอย่างที่ไม่ใช่ตัวอักษรนี่คือทางออก:

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


5
ที่จะใช้วิธีการแก้ปัญหานี้ในตัวอักษรที่ไม่ใช่ละตินโปรดตรวจสอบคำตอบนี้ออก
EFKAN

ตัวเลือกนี้จะลบตัวเลขออกด้วย!
tech_geek

15
@tech_geek คุณสามารถทำได้str.replace(/[^a-zA-Z0-9]/g, "")
Chidi Williams

2
จริงๆแล้วคุณต้องการการstr.replace(/[^a-zA-Z0-9 ]/g, "");แจ้งเตือนนี้มีช่องว่างระหว่าง 0-9 และ]
Ammar Shah

มันต้องมีการปรับแต่งบางอย่างมันไม่ได้ลบ / หรือ - ตัวละครและตัวแรกของ camelCase ควรจะเป็นตัวพิมพ์เล็ก แต่ตัวนี้เป็นตัวพิมพ์ใหญ่
Sansun

133

คุณสามารถระบุอักขระที่คุณต้องการลบ:

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

หรือหากต้องการเปลี่ยนอักขระทั้งหมดยกเว้นตัวเลขและตัวอักษรให้ลอง:

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

4
ถ้าฉันไม่ต้องการลบพื้นที่โดยใช้สิ่งนี้ล่ะ /[^a-zA-Z0-9]/g
aadi1295

8
@ArbazAbid เพื่อให้มีพื้นที่เพียงแค่เพิ่มลงในอักขระสีขาว regex ของคุณจะเป็น "/ [^ a-zA-Z0-9] / g" (สังเกตช่องว่างหลัง 9)
Crhistian Ramirez

1
นี่คือคำตอบที่ใช้งานได้หากต้องการพื้นที่
นาธาน

แทนที่นี้()และwhitespacesในสตริง.text().replace(/[ ()]/g, '')
อลอนโซ่ C Ortega

30

วิธีแก้ปัญหาแรกไม่สามารถใช้ได้กับตัวอักษร 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)


ขอบคุณสำหรับคำตอบที่ค่อนข้างสร้างสรรค์ มันสอดคล้องกับวิธีการใช้ภาษาจริง ๆ แล้วเนื่องจากเราหลายคนไม่พิจารณาตัวอักษรพิเศษ "Привіт" หรือ "æøå" คำตอบส่วนใหญ่ที่นั่นตัดตัวละครที่ไม่ได้เป็นส่วนหนึ่งของตัวอักษรภาษาอังกฤษ
Alex Langberg

1
เกือบจะเป็นคำตอบที่สมบูรณ์แบบสำหรับฉัน แต่น่าเสียดายที่มันถือว่าตัวอักษรจีนเป็นตัวอักษรพิเศษ
Eric Majerus

@EricMajerus และภาษาฮินดีด้วย
โปรแกรมเมอร์

ระวังนี่จะถือว่าตัวเลขเป็นอักขระพิเศษด้วย
just_user

11

ฉันไม่รู้ JavaScript แต่ใช้ regex ไม่ได้ใช่ไหม

สิ่งที่ชอบ[^\w\d\s]จะตรงกับทุกอย่างยกเว้นตัวเลขตัวอักษรและช่องว่าง มันจะเป็นเพียงคำถามเพื่อค้นหาไวยากรณ์ใน JavaScript


1
stackoverflow.com/a/4374890/2384606 นี่คือคำตอบสำหรับคำถามของคุณ :)
Carmela

8

ฉันลองโซลูชันที่สร้างสรรค์มากของ Seagul แต่พบว่ามันใช้ตัวเลขเป็นตัวละครพิเศษซึ่งไม่ตรงกับความต้องการของฉัน ดังนั้นนี่คือบิด (ล้มเหลว) ของโซลูชัน 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 '';
}

คุณลืมที่จะประกาศregในฟังก์ชั่นแรกของคุณ
Noman Ali


1

ลองใช้อันนี้

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

ที่นี่ ^ carat สำหรับการปฏิเสธ \ w สำหรับ [a-zA-Z0-9_] ตัวอักษรคำและ \ s สำหรับช่องว่าง / [] / gi สำหรับทั่วโลก


0

จุด (.) อาจไม่ถือว่าเป็นพิเศษ ฉันได้เพิ่มเงื่อนไข OR ในคำตอบของ 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

ที่มีอักขระพิเศษที่คุณต้องการลบออกจากสตริงเตรียมรายการของพวกเขาจากนั้นผู้ใช้จาวาสคริปต์แทนที่ฟังก์ชั่นเพื่อลบอักขระพิเศษทั้งหมด

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

หรือคุณสามารถเรียกใช้ลูปสำหรับสตริงทั้งหมดและเปรียบเทียบอักขระเดี่ยวเดียวกับรหัส ASCII และสร้างสตริงใหม่


9
ไม่โปรดอย่าทำอย่างนั้น มันช้ามากจริงๆ มันดีกว่ามากถ้าใช้นิพจน์ทั่วไป
Keith Irwin

วิธีนี้ดีมากสำหรับการแทนที่ตัวละครเพียงตัวเดียว ในกรณีของฉันมันเป็นประโยชน์ขอบคุณ
Vahid Najafi

แทนที่จะใช้วิธีการแทนที่หลายครั้งโปรดใช้เพียงครั้งเดียวโดยใช้นิพจน์ปกติ
FAISAL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.