02/10/2018, 20:46

Lọc dấu tiếng Việt trong Csharp, javascript và SQL Server

Trong khi lập trình có khi bạn cần lọc dấu chuỗi tiếng việt (Unicode) thành chuỗi không dấu. Ví dụ trong Form đăng nhập hoặc đăng ký thành viên bạn không muốn TenDangNhap có dấu, hoặc các liên kết không dấu, Tôi sẽ giới thiệu các hàm lọc dấu trong C#, javascript và SQL Server ...

Trong khi lập trình có khi bạn cần lọc dấu chuỗi tiếng việt (Unicode) thành chuỗi không dấu. Ví dụ trong Form đăng nhập hoặc đăng ký thành viên bạn không muốn TenDangNhap có dấu, hoặc các liên kết không dấu, Tôi sẽ giới thiệu các hàm lọc dấu trong C#, javascript và SQL Server

Trong khi lập trình có khi bạn cần lọc dấu chuỗi tiếng việt (Unicode) thành chuỗi không dấu. Ví dụ trong Form đăng nhập hoặc đăng ký thành viên bạn không muốn TenDangNhap có dấu, hoặc các liên kết không dấu, Tôi sẽ giới thiệu các hàm lọc dấu trong C#, javascript và SQL Server

1. Hàm lọc dấu tiếng việt trong C#.

private static readonly string[] VietNamChar = new string[] { "aAeEoOuUiIdDyY", "áàạảãâấầậẩẫăắằặẳẵ", "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ", "éèẹẻẽêếềệểễ", "ÉÈẸẺẼÊẾỀỆỂỄ", "óòọỏõôốồộổỗơớờợởỡ", "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ", "úùụủũưứừựửữ", "ÚÙỤỦŨƯỨỪỰỬỮ", "íìịỉĩ", "ÍÌỊỈĨ", "đ", "Đ", "ýỳỵỷỹ", "ÝỲỴỶỸ" }; public static string LocDau(string str) { //Thay thế và lọc dấu từng char 
for (int i = 1; i < VietNamChar.Length; i++) { for (int j = 0; j < VietNamChar[i].Length; j++) str = str.Replace(VietNamChar[i][j], VietNamChar[0][i - 1]); } return str; }


Ví dụ string locdau = LocDau("hmclip.net Video clip tổng hợp") Sẽ cho kết quả là: hmclip.net Video clip tong hop
 

2. Hàm lọc dấu trong Javascript

function locdau(obj) { var str; if (eval(obj)) str = eval(obj).value; else str = obj; str = str.toLowerCase(); str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a"); str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e"); str = str.replace(/ì|í|ị|ỉ|ĩ/g, "i"); str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o"); str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u"); str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y"); str = str.replace(/đ/g, "d"); //str= str.replace(/!|@|%|^|*|(|)|+|=|<|>|?|/|,|.|:|;|'| |"|&|#|[|]|~|$|_/g,"-"); 
/* tìm và thay thế các kí tự đặc biệt trong chuỗi sang kí tự - */
//str= str.replace(/-+-/g,"-");
//thay thế 2- thành 1- str = str.replace(/^-+|-+$/g, "");
//cắt bỏ ký tự - ở đầu và cuối chuỗi
eval(obj).value = str.toUpperCase(); }


Sử dụng hàm này: Khi đó txtTenDangNhap sẽ chỉ nhập được không dấu.

 3. Hàm lọc dấu trong SQL

CREATE FUNCTION [dbo].[fLocDauTiengViet] ( @strInput NVARCHAR(4000) ) RETURNS NVARCHAR(4000) AS Begin Set @strInput=rtrim(ltrim(lower(@strInput))) IF @strInput IS NULL RETURN @strInput IF @strInput = ' RETURN @strInput Declare @text nvarchar(50), @i int Set @text='-'`~!@#$%^&*()?><:|}{,./"'=';–' Select @i= PATINDEX('%['+@text+']%',@strInput ) while @i > 0 begin set @strInput = replace(@strInput, substring(@strInput, @i, 1), ') set @i = patindex('%['+@text+']%', @strInput) End Set @strInput =replace(@strInput,' ',' ') DECLARE @RT NVARCHAR(4000) DECLARE @SIGN_CHARS NCHAR(136) DECLARE @UNSIGN_CHARS NCHAR (136) SET @SIGN_CHARS = N'ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệế ìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵý' +NCHAR(272)+ NCHAR(208) SET @UNSIGN_CHARS = N'aadeoouaaaaaaaaaaaaaaaeeeeeeeeee iiiiiooooooooooooooouuuuuuuuuuyyyyy' DECLARE @COUNTER int DECLARE @COUNTER1 int SET @COUNTER = 1 WHILE (@COUNTER <=LEN(@strInput)) BEGIN SET @COUNTER1 = 1 WHILE (@COUNTER1 <=LEN(@SIGN_CHARS)+1) BEGIN IF UNICODE(SUBSTRING(@SIGN_CHARS, @COUNTER1,1)) = UNICODE(SUBSTRING(@strInput,@COUNTER ,1) ) BEGIN IF @COUNTER=1 SET @strInput = SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)-1) ELSE SET @strInput = SUBSTRING(@strInput, 1, @COUNTER-1) +SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1) + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)- @COUNTER) BREAK END SET @COUNTER1 = @COUNTER1 +1 END SET @COUNTER = @COUNTER +1 End SET @strInput = replace(@strInput,' ','-') RETURN lower(@strInput) End


      Ví dụ: 
SELECT dbo.fLocDauTiengViet(N'hmclip - Lọc dấu tiếng Việt trong Csharp, javascript và SQL Server')
       sẽ cho kết quả: 
hmclip-loc-dau-tieng-viet-trong-csharp-javascript-va-sql-server

Ứng dụng của hàm này bạn có thể dùng để lọc dầu các title của bài viết để tối ưu hơn đổi với các công cụ tìm kiếm

Nguồn:http://www.thietkewebsmart.com/asp-net-csharp/loc-dau-tieng-viet-trong-csharp-javascript-va-sql-server/191.htm

Bình luận
0