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#.
Cách 1:
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[“chiencong.com chia sẻ kinh nghiệm lập trình”] Sẽ cho kết quả là: chiencong.com chia se kinh nghiem lap trinhCách 2: Cách này đơn giản và tối ưu hơn
public string convertToUnSign2[string s] {
string stFormD = s.Normalize[NormalizationForm.FormD];
StringBuilder sb = new StringBuilder[];
for [int ich = 0; ich < stFormD.Length; ich++]
{
System.Globalization.UnicodeCategory uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory[stFormD[ich]];
if [uc != System.Globalization.UnicodeCategory.NonSpacingMark]
{
sb.Append[stFormD[ich]];
}
}
sb = sb.Replace['Đ', 'D'];
sb = sb.Replace['đ', 'd'];
return [sb.ToString[].Normalize[NormalizationForm.FormD]];
}Cách 3: Cách này tương tự cách thứ 2. Nhưng cách viết ngắn gọn hơn. Chúng ta có thể sử dụng cách này.
public static string convertToUnSign3[string s] {
Regex regex = new Regex["\\p{IsCombiningDiacriticalMarks}+"];
string temp = s.Normalize[NormalizationForm.FormD];
return regex.Replace[temp, String.Empty].Replace['\u0111', 'd'].Replace['\u0110', 'D'];
} 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='-''`~!@#$%^&*[]?>