ฉันต้องการลบอักขระพิเศษทั้งหมดยกเว้นเว้นวรรคออกจากสตริงโดยใช้ JavaScript
ยกตัวอย่างเช่น
ควรออกเป็นabc's test#s
abcs tests
ฉันต้องการลบอักขระพิเศษทั้งหมดยกเว้นเว้นวรรคออกจากสตริงโดยใช้ JavaScript
ยกตัวอย่างเช่น
ควรออกเป็นabc's test#s
abcs tests
คำตอบ:
คุณควรใช้ฟังก์ชั่นแทนที่สตริงด้วย regex เดี่ยว สมมติว่ามีตัวละครพิเศษคุณหมายถึงทุกอย่างที่ไม่ใช่ตัวอักษรนี่คือทางออก:
const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));
str.replace(/[^a-zA-Z0-9]/g, "")
str.replace(/[^a-zA-Z0-9 ]/g, "");
แจ้งเตือนนี้มีช่องว่างระหว่าง 0-9 และ]
คุณสามารถระบุอักขระที่คุณต้องการลบ:
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
หรือหากต้องการเปลี่ยนอักขระทั้งหมดยกเว้นตัวเลขและตัวอักษรให้ลอง:
string = string.replace(/[^a-zA-Z0-9]/g, '');
/[^a-zA-Z0-9]/g
()
และwhitespaces
ในสตริง.text().replace(/[ ()]/g, '')
วิธีแก้ปัญหาแรกไม่สามารถใช้ได้กับตัวอักษร 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
)
ฉันไม่รู้ JavaScript แต่ใช้ regex ไม่ได้ใช่ไหม
สิ่งที่ชอบ[^\w\d\s]
จะตรงกับทุกอย่างยกเว้นตัวเลขตัวอักษรและช่องว่าง มันจะเป็นเพียงคำถามเพื่อค้นหาไวยากรณ์ใน JavaScript
ฉันลองโซลูชันที่สร้างสรรค์มากของ 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
ในฟังก์ชั่นแรกของคุณ
ค้นหาทั้งหมดไม่ใช่ (ตัวอักษรคำ || space):
str.replace(/[^\w ]/, '')
ลองใช้อันนี้
var result= stringToReplace.replace(/[^\w\s]/gi, '')
ที่นี่ ^ carat สำหรับการปฏิเสธ \ w สำหรับ [a-zA-Z0-9_] ตัวอักษรคำและ \ s สำหรับช่องว่าง / [] / gi สำหรับทั่วโลก
จุด (.) อาจไม่ถือว่าเป็นพิเศษ ฉันได้เพิ่มเงื่อนไข 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 '';
}
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));
ที่มีอักขระพิเศษที่คุณต้องการลบออกจากสตริงเตรียมรายการของพวกเขาจากนั้นผู้ใช้จาวาสคริปต์แทนที่ฟังก์ชั่นเพื่อลบอักขระพิเศษทั้งหมด
var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));
หรือคุณสามารถเรียกใช้ลูปสำหรับสตริงทั้งหมดและเปรียบเทียบอักขระเดี่ยวเดียวกับรหัส ASCII และสร้างสตริงใหม่