Câu trả lời:
Bạn nên sử dụng chức năng thay thế chuỗi, với một biểu thức chính. Giả sử bởi các ký tự đặc biệt, bạn có nghĩa là bất cứ điều gì không phải là chữ cái, đây là một giải pháp:
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, "");
thông báo này có khoảng cách từ 0-9 đến]
Bạn có thể làm điều đó chỉ định các ký tự bạn muốn xóa:
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
Ngoài ra, để thay đổi tất cả các ký tự ngoại trừ số và chữ cái, hãy thử:
string = string.replace(/[^a-zA-Z0-9]/g, '');
/[^a-zA-Z0-9]/g
()
và whitespaces
trong chuỗi.text().replace(/[ ()]/g, '')
Giải pháp đầu tiên không hoạt động đối với bất kỳ bảng chữ cái UTF-8. (Nó sẽ cắt văn bản, chẳng hạn như Привіт). Tôi đã quản lý để tạo một chức năng không sử dụng RegExp và sử dụng hỗ trợ UTF-8 tốt trong công cụ JavaScript. Ý tưởng rất đơn giản nếu một biểu tượng bằng chữ in hoa và chữ thường nó là một ký tự đặc biệt. Ngoại lệ duy nhất được thực hiện cho khoảng trắng.
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;
}
Cập nhật: Xin lưu ý rằng giải pháp này chỉ hoạt động đối với các ngôn ngữ có chữ in hoa và chữ in hoa nhỏ. Trong các ngôn ngữ như tiếng Trung Quốc, điều này sẽ không hoạt động.
Cập nhật 2: Tôi đã đến với giải pháp ban đầu khi tôi đang làm việc trên một tìm kiếm mờ. Nếu bạn cũng cố gắng loại bỏ các ký tự đặc biệt để thực hiện chức năng tìm kiếm, có một cách tiếp cận tốt hơn. Sử dụng bất kỳ thư viện chuyển ngữ nào sẽ tạo ra chuỗi của bạn chỉ từ các ký tự Latinh và sau đó Regapi đơn giản sẽ thực hiện tất cả các phép thuật loại bỏ các ký tự đặc biệt. (Điều này cũng sẽ hiệu quả với người Trung Quốc và bạn cũng sẽ nhận được lợi ích phụ bằng cách thực hiện Tromsø
== Tromso
).
Tôi không biết JavaScript, nhưng không thể sử dụng regex?
Một cái gì đó giống như [^\w\d\s]
sẽ phù hợp với bất cứ điều gì ngoại trừ chữ số, ký tự và khoảng trắng. Nó sẽ chỉ là một câu hỏi để tìm cú pháp trong JavaScript.
Tôi đã thử giải pháp rất sáng tạo của Seagul, nhưng thấy nó cũng được coi là những con số đặc biệt, không phù hợp với nhu cầu của tôi. Vì vậy, đây là tinh chỉnh (failafe) của tôi về giải pháp của 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
trong chức năng đầu tiên của bạn.
Hãy thử sử dụng cái này
var result= stringToReplace.replace(/[^\w\s]/gi, '')
ở đây ^ carat là để phủ định \ w cho [a-zA-Z0-9_] ký tự từ và \ s cho dấu cách / [] / gi cho toàn cục
dấu chấm (.) có thể không được coi là đặc biệt. Tôi đã thêm một điều kiện OR vào câu trả lời của 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));
Những ký tự đặc biệt bạn muốn xóa khỏi chuỗi, chuẩn bị danh sách chúng và sau đó sử dụng chức năng thay thế javascript để xóa tất cả các ký tự đặc biệt.
var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));
hoặc bạn có thể chạy vòng lặp cho toàn bộ chuỗi và so sánh một ký tự đơn với mã ASCII và tạo lại một chuỗi mới.