01/10/2018, 09:24

Javascript so sánh 2 chuỗi quá chặt

Mình có 2 chuỗi sau:
var Chuoi1 = "Xin chào"; // Được viết bằng unicode
var Chuoi2 = "Xin chào"; // Được viết bằng unicode tổ hợp
nhìn thì trông có vẻ không khác gì nhau nhưng khi so sánh 2 chuỗi này có bằng nhau hay không? với javascript thì nó sẽ báo là sai!.

Câu hỏi mình đặt ra là mọi người có cách nào so sánh lỏng hơn được không?, nghĩa là khác mã vẫn cho đúng.

Zhang Jike viết 11:36 ngày 01/10/2018

Try this:

GitHub

walling/unorm

unorm - JavaScript Unicode 8.0 Normalization - NFC, NFD, NFKC, NFKD.

viết 11:33 ngày 01/10/2018

Nếu là code của bạn thì dùng chung 1 kiểu encode.
Nếu không phải mà lấy ở đâu về thì làm cách nào đấy convert nó sang cùng 1 dạng.
Mình thì sẽ chuyển hết thành không dấu rồi so sánh :3

Để đi sâu hơn thì buộc phải tìm hiểu về unicode trong js thôi.

HotaVN viết 11:28 ngày 01/10/2018

đấy code của mình, mình muốn người dùng nhập vì họ có thể sử dụng loại bảng mã khác nên javascript sẽ song sánh là sai. nếu làm theo cách của bạn “chuyển về không dấu” nhưng nếu cái bảng mã dùng trong hàm chuyển của bạn là unicode nhưng của họ là unicode tổ hợp thì sẽ không được nhé bạn :))

Trần Hoàn viết 11:35 ngày 01/10/2018

Ngôn ngữ nào chả thế bạn ơi, đâu phải mỗi JS :))
Có thể đối với bạn, 2 chuỗi đó giống nhau (Và giống luôn cả chuỗi “Xin chào” trong bảng mã TCVN3 thời vua Hùng nữa ) nhưng kỳ thực đó là các ký tự khác nhau. Và mình nghĩ bạn nên chuyển hết tất cả về Unicode dựng sẵn đi, vì nói chung thế giới dùng cái đó nhiều hơn, cũng như việc xây dựng bảng so sánh dấu cũng đỡ phức tạp.

HotaVN viết 11:35 ngày 01/10/2018

mình sử dụng php thấy khi so sánh thì nó chuyển về cùng một dạng, có phải là php được hỗ trợ thêm phải không?, còn việc chuyển hết về unicode thì cái dữ liệu của mình cực kì nhiều!, phức tạp thì không quan tâm vì mình không phải là dùng để học nữa

viết 11:25 ngày 01/10/2018

Thì bạn bắt người dùng nhập từ keyboard của bạn đi. Có lib keyboard = js đấy
Mình nói là chuyển về 1 dạng thì có nhiều kiểu, chuyển về k dấu là 1 kiểu, chuyển từ chữ sang số là 1 kiểu, chuyển hết về base64 cũng là 1 kiểu. Quan trọng là bạn thôi.

HotaVN viết 11:29 ngày 01/10/2018

Không được đâu bạn nếu chơi kiểu chèn ép bắt buộc là mất điểm họ sẽ chuyển sang trang khác vì sự bất tiện đó

Trần Hoàn viết 11:24 ngày 01/10/2018

Bạn cố gắng xây dựng hàm chuyển tổ hợp thành dựng sẵn trước khi nhập thông tin nhé :)) Hình như có người làm rồi đó?

viết 11:29 ngày 01/10/2018

Có rồi, dùng normalize

a = Chuoi1.normalize();
b = Chuoi2.normalize();
a === b ?
Bài liên quan
0