© 2020, Developed by Hieu Dev

Các ví dụ thực tế hay sử dụng Regular Expression trong c#

Khi bạn code một project không thể không gặp các Regex, bản thân chúng là các pattern thay vì các chuỗi cụ thể được sử dụng tìm hoặc thay thế. Là một công cụ cực mạnh cho việc xử lí các chuỗi trong C#, javascript...


Hôm nay, mình sẽ giới thiệu và tổng hợp đến các bạn C\các ví dụ thực tế hay sử dụng Regular Expression trong c# qua các ví dụ dưới đây:

Loại bỏ thẻ tag html

Trong một vài trường hợp, ví dụ như các comment, người dùng đôi lúc nhập kèm theo các html tag, nên để kiểm soát bảo mật website bạn cần chặn ngay các html gây hại đến website của bạn:

public static string TrimHtmlTags(this string input)
{
    if (string.IsNullOrEmpty(input))
        return null;
    input = HttpUtility.HtmlDecode(input);
    return Regex.Replace(input, @"<.[^>]*>", string.Empty);
}

Chuyển chuỗi có dấu sang không dấu

Là một hàm static sử dụng regex hay gặp rất thông dụng trong việc chuyển chuỗi có dấu sang không dấu:

public static string ToVietNameseChacracter(this string s)
{
    if (string.IsNullOrEmpty(s))
        return string.Empty;
    Regex regex = new Regex("\\p{IsCombiningDiacriticalMarks}+");
    string temp = s.Normalize(NormalizationForm.FormD);
    return regex.Replace(temp, String.Empty);
}

Kiểm tra xem có phải là Email không

Đây là ví dụ hay gặp trong việc kiểm tra email có hợp lệ hay không:

public bool IsValidMail(string email)
{
    if (string.IsNullOrEmpty(email))
        return false;
    string sMailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
    return Regex.IsMatch(email.Trim(), sMailPattern);
}
 

Kiểm tra có phải là số điện thoại di động ở Việt Nam không

Dưới đây là một biểu thức chính quy thuần để kiểm tra số điện thoại vừa nhập có phải số điện thoại Việt Nam hay không:

public bool IsValidVietNamPhoneNumber(string phoneNum)
{
    if (string.IsNullOrEmpty(phoneNum))
        return false;
    string sMailPattern = @"^((09(\d){8})|(086(\d){7})|(088(\d){7})|(089(\d){7})|(01(\d){9}))$";
    return Regex.IsMatch(phoneNum.Trim(), sMailPattern);
}

Kiểm tra độ mạnh của mật khẩu

Một mật khẩu mạnh thì trong nhiều trường hợp khác nhau được quy ước khác nhau, và đây là cách tôi hay dùng để kiểm tra mật khẩu mạnh:

^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$ 

Kiểm tra địa chỉ IPv4

Địa chỉ IP, được sử dụng để xác định một máy tính cụ thể truy cập Internet. Biểu thức chính quy này sẽ kiểm tra một chuỗi xem nó có tuân theo cú pháp địa chỉ IPv4 hay không:

/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/

Kiểm tra địa chỉ IPv6

Khác với IPv4, biểu thức chính quy kiểm tra IPv6 phức tạp và nâng cao hơn, hãy tham khảo dưới đây:

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])) 

Dấu phân cách hàng nghìn

Mã regex này hoạt động trên bất kỳ số nào và sẽ áp dụng bất cứ dấu phân cách nào bạn chọn cho mỗi chữ số thứ ba phân tách thành hàng ngàn, hàng triệu,...

/\d{1,3}(?=(\d{3})+(?!\d))/g 

Lấy tên miền từ URL

Như các bạn được biết, mỗi tên miền trang web đều chứa giao thức HTTP hoặc HTTPS và đôi khi có tên miền phụ với đường dẫn trang bổ sung. Bạn có thể sử dụng đoạn regex này để cắt qua tất cả những điều đó và chỉ trả lại tên miền:

/https?:\/\/(?:[-\w]+\.)?([-\w]+)\.\w+(?:\.\w+)?\/?.*/i  

Xác thực ngày trong định dạng DD/MM/YYYY

Khi sử dụng regex này, bạn cần cân nhắc việc thay thế bằng cách sử dụng biểu thức chính quy này cho các cú pháp ngày cụ thể:

^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$   

Kiểm tra trùng khớp ID Video Youtube

Như các bạn được biết, Youtube đã giữ cấu trúc URL giống nhau trong nhiều năm, vì thế đây là regex hoàn hảo trong việc kiểm tra ID video Youtube từ một URL:

/https?:\/\/(?:youtu\.be\/|(?:[a-z]{2,3}\.)?youtube\.com\/watch(?:\?|#\!)v=)([\w-]{11}).*/gi 

Kiểm tra mã bưu điện

Đây là đoạn regex kiểm tra mã bưu điện dành cho hệ thống mã bưu điện của Mỹ nên có thể bạn sẽ cần điều chỉnh cho các quốc gia khác:

^\d{5}(?:[-\s]\d{4})?$  

Kiểm tra số thẻ tín dụng

Chứng thực số thẻ tín dụng thường bắt buộc một nền tảng máy chủ an toàn. Nhưng regex có thể được sử dụng cho các yêu cầu tối thiểu của một số thẻ tín dụng điển hình:

^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$  

Và đây là tất cả các biểu thức chính quy (regular expression) thường gặp nhất mà tổng hợp chia sẻ đến các bạn, mong bài viết hữu ích đến các bạn, chúc các bạn thành công.

Hiếu Quốc.

Đăng nhận xét

Mới hơn Cũ hơn