2011-07-02 75 views

Trả lời

165

Bạn nên sử dụng hàm thay thế chuỗi, với một regex đơn. Giả sử bằng ký tự đặc biệt, bạn có nghĩa là bất cứ điều gì đó không phải là bức thư, đây là một giải pháp:

var str = "abc's test#s"; 
alert(str.replace(/[^a-zA-Z ]/g, "")); 
+30

Điều này sẽ không hoạt động đối với các từ không phải tiếng Anh như "Термінатор" – Seagull

+2

Để sử dụng giải pháp này trên bảng chữ cái phi latin, vui lòng kiểm tra [answer] (https://stackoverflow.com/a/150078/3765109) trên – efkan

-6

Có các ký tự đặc biệt bạn muốn xóa khỏi chuỗi, chuẩn bị danh sách và sau đó người dùng javascript thay thế hàm để 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 ký tự đơn với mã ASCII và tạo lại chuỗi mới.

+6

Không, xin đừng làm vậy. Nó thực sự rất chậm. Nó là nhiều, tốt hơn nhiều để sử dụng một biểu thức chính quy. –

+0

Giải pháp này rất hay để thay thế chỉ một ký tự. Trong trường hợp của tôi, nó rất hữu ích, cảm ơn. –

5

Tôi không biết Javascript, nhưng không phải là nó có thể sử dụng regex?

Thứ gì đó như [^\w\d\s] sẽ khớp với bất kỳ thứ gì 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.

+0

http: // stackoverflow.com/a/4374890/2384606 Đây là câu trả lời cho câu hỏi của bạn :) – Carmela

54

Bạn có thể làm điều đó xác định các ký tự mà bạn muốn loại bỏ:

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

Ngoài ra, để thay đổi tất cả các nhân vật ngoại trừ số và chữ cái, hãy thử:

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

nếu tôi không muốn xóa không gian bằng cách này thì sao? '/ [^ a-zA-Z0-9]/g' –

+0

@ArbazAbid để giữ không gian chỉ cần thêm nó vào các ký tự được liệt kê trắng. regex của bạn sẽ là "/ [^ a-zA-Z0-9]/g" (thông báo khoảng trắng sau 9) –

20

Các giải pháp đầu tiên không làm việc cho bất kỳ bảng chữ cái UTF-8 nào. (Nó sẽ cắt văn bản như Привіт). Tôi đã quản lý để tạo ra chức năng mà không sử dụng RegExp và sử dụng tốt UTF-8 hỗ trợ trong công cụ JavaScript. Ý tưởng là đơn giản nếu biểu tượng là bình đẳng trong chữ hoa và chữ thường nó là ký tự đặc biệt. Ngoại lệ duy nhất được tạo 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; 
} 
+0

Cảm ơn bạn vì giải pháp khá sáng tạo này. Nó là nhiều hơn nữa phù hợp với cách ngôn ngữ thực sự làm việc, vì nhiều người trong chúng ta không xem xét "Привіт" hoặc "øøå" ký tự đặc biệt. Hầu hết các giải pháp trên mạng đều cắt bất kỳ ký tự nào không phải là một phần của bảng chữ cái tiếng Anh. –

+1

Hầu như câu trả lời hoàn hảo cho tôi, nhưng tiếc là nó coi nhân vật Trung Quốc là những nhân vật đặc biệt. –

+0

@EricMajerus và tiếng Hin-ddi quá – programmer

8

Tôi đã thử giải pháp rất sáng tạo của Seagul, nhưng thấy nó được xử lý số cũng như các ký tự đặ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 (không an toàn) 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 ''; 
} 
+0

Bạn quên khai báo 'reg' trong hàm đầu tiên của mình. –

0

chấm (.) Có thể không được coi là đặc biệt. Tôi đã thêm một điều kiện OR để & câu trả lời Seagull của Mozfet của:

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

tìm kiếm tất cả các không (ký tự chữ || gian):

str.replace(/[^\w ]/, '') 
Các vấn đề liên quan