Khám phá
Trả lời
Hỏi
Đăng nhập

Javascript - Cách remove dấu, ký tự đặc biệt trong chuỗi tiếng Việt ?

Đang có case thể này:

  • Input : var str = 'Đây là tiêu đề của bài viết'
  • Expected: var str = 'day-la-tieu-de-cua-bai-viet'

Có cao thủ nào giúp e không ạ ?

  1. Bạn sẽ nhìn thấy những mũi tên trong mỗi trang câu hỏi. Chúng cho phép bạn bỏ phiếu thuận / bỏ phiếu chống theo sự liên quan của các câu hỏi / trả lời.
  2. Chỉnh sửa câu hỏi của bạn / câu trả lời nếu bạn muốn thay đổi hoặc cập nhật nó.
  3. Nếu bạn không hiểu điều gì đó về câu hỏi, để lại nhận xét hỏi. Những vùng cho câu trả lời chỉ được sử dụng cho câu trả lời.
  4. Nếu tác giả của một câu hỏi đánh dấu một câu trả lời như giải pháp, nhãn hiệu này sẽ được hiển thị.
  5. Nhấn vào đây để xem thêm chi tiết về những hoạt động của hệ thống!

1 trả lời

  • Bạn tham khảo thử cách này.

    var str = 'Đây là tiêu đề của bài viết';
    
    //replace spaces
    str = str.replace(/\s+/g, '-');
    
    //Định nghĩa map từ kí tự có đấu tiếng việt sang kí tự không dấu. Bổ sung những kí tự còn lại.
    //Tham khảo thêm về codePoint của các kí tự tại đây. http://graphemica.com/a
    const mappingTable = new Map([
      [0x0111, 0x0064], //đ -> d
      [0x00E2, 0x0061], // â -> a
      [0x00E0, 0x0061], // à -> a
      [0x00EA, 0x0065], // ê -> e
      [0x1EC1, 0x0065], //ề -> e
      [0x1EBF, 0x0065], // ế -> e
      [0x1EE7, 0x0075] // ủ -> u
    ]);
    
    
    
    str = str.toLowerCase();
    str = str.normalize();
    
    let index = 0; 
    const codePoints = [];
    while (str.codePointAt(index)) {
      const codePoint = str.codePointAt(index);
      if(mappingTable.get(codePoint)) {
        codePoints.push(mappingTable.get(codePoint));
      } else {
        codePoints.push(codePoint);
      }
      ++index;
    }
    
    console.log(String.fromCodePoint(...codePoints));
    • Thanks bạn nhìu nhé

      Van Nguyen
        cách đây 4 tuần

Không phải là câu trả lời bạn đang tìm kiếm? Tìm kiếm câu hỏi khác với các thẻ javascript nodejs hoặc hỏi câu hỏi mới.