Hàm IsNumber() trong C# kiểm tra chuỗi dữ liệu có phải là chuỗi số không

Gần đây mình thấy trên google có những  keyword tìm về hàm IsNumber() trong C#. Liệu ngôn ngữ C# có hỗ trợ hàm IsNumber() để kiểm tra một chuỗi  truyền vào có phải là chuỗi số hay không?, giống như hàm IsNumber() trong Excel và SQL không?

Ở đây mình nhấn mạnh là “chuỗi” chứ không phải là một ký tự đơn. Nếu là một ký tự đơn thì C# đã hỗ trợ cho chúng ta hàm IsDigit() hoặc hàm IsNumber() trong lớp Char rồi. Chúng ta chỉ cần gọi hàm này để kiểm tra là biết ngay ký tự của mình có phải là số hay không đó mà.

Còn về việc cần kiểm tra một “chuỗi” thì sao? Chuỗi đó có số lẽ thì sao?

Sự thật là mình cũng chưa thấy hàm này bao giờ, nhưng không sao, bạn đừng lo lắng. Chúng ta có thể tạo ra một hàm IsNumber() của riêng mình. Mỗi lần mình muốn kiểm ta một chuỗi giá trị nào đó có phải là chuỗi số hay không thì chúng ta chỉ cần gọi làm IsNumber() của mình là đủ. Dưới đây mình sẽ viết hàm IsNumber() theo 2 cách khác nhau.

Cách 1: mình sử dụng lại hàm IsDigit() của lớp Char để viết hàm IsNumber()

Cách 2: mình sử dụng lớp Regex trong RegularExpression để viết hàm IsNumber()

Dưới đây là code minh họa:

// Cách 1

public bool IsNumber(string pValue)
{
         foreach (Char c in pValue)
         {
                if (!Char.IsDigit(c))
                     return false;
         }
         return true;
}

// Cách 2;

public bool IsNumber(string pText)
{
       Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
       return regex.IsMatch(pText);
}

Giải thích:

Cách 1: chuỗi của bạn chỉ là một chuỗi các số nguyên, ví dụ “140”, “34444”, …. Nếu chuỗi của bạn là số lẽ thì sẽ trả về false.

Cách 2: chuỗi của bạn có thể là số nguyên hay số lẽ, ví dụ “13333445” hay “45.25”, …

Ngoài ra bạn có thể sử dụng hàm TryParse()

Tương ứng với mỗi lớp kiểu dữ liệu số trong C#, đều có hỗ trợ hàm TryParse(), ví dụ double.TryParse(), int.TryParse(), float.TryParse, decimal.TryParse(), …

Chúng ta có thể sử dụng các hàm này để kiểm tra giá trị chuỗi truyền vào có phải là chuỗi số hay không. Tuy nhiên các hàm này đòi hỏi bạn phải tốn thêm một biến để chứa giá trị sau khi được chuyển đổi.

Tùy theo từng mục đích sử dụng mà các bạn chọn hàm IsNumber() chúng ta viết hay chọn các hàm TryParse() có sẵn để sử dụng. Mỗi cách có một ưu điểm riêng.

Chúc các bạn thành công! :roll:


11 comments

  1. cảm ơn bài viết của bạn mình thấy rất hay và hữu ích cho newbie .
    chúc bạn thành công và có nhiều bài viết hơn

    1. chào a em đang muốn cắt lấy chữ cái đầu tiên của các từ trong chuỗi trong c# nhưng không thể nào nghĩ ra cách nào em rất mong anh giúp đỡ ví dụ chuỗi : “Lê Văn Đức” thì kết quả sẽ là ; “LVD” hay chuỗi ; “Rất Cám Ơn anh Đã Giúp em” thì kết quả là : “RCOADGE” cám ơn anh đã đọc câu hỏi của em. Em rất mong nhận được sự giúp đỡ của anh
      mail em là: takun_1988@yahoo.com.vn

    1. Góc Kinh Nghiệm vào bạn @mr.tuan!

      Hàm trả về giá trị true/false thôi à. Nếu đúng là chuỗi số (=true) thì mang đi thao tác tiếp chẵn hạn.

  2. nghĩa là sau khi kiểm tra thì mình có thể dùng nó như là chuỗi số hả chị

  3. Hi
    Anh đang có 1 việc làm (có kinh phí) liên quan đến Regex HTML, cần chuyên gia có kinh nghiệm xử lý.
    Em gọi điện thoại cho anh theo số 0934188989
    hoặc skype nam.truongthanh
    để trao đổi chi tiết nhé.

  4. Bạn ơi, bạn vui lòng giúp mình với.
    Tình hình là hiện giờ mình đang quản lý 1 file ms Access chứa thông tin để import vào hệ thống nhắn tin tự động cho khách hàng. File gồm có 3 cột HOTENKH; SOTK; SĐT. nhưng cột SĐT mình cứ bị lỗi do nhân viên nhập lộn sđt (thường là do nhập thiếu hoặc dư). bạn hướng đẫ giúp mình tạo ra 1 lệnh kiểm tra điều kiện trong cột sđt được kgo6ng ạ?. cụ thể là các sđt bắt đầu là 09… thì chiều dài chuỗi đó phải là 10 ký số; nếu bắt đầu là 01… thì chiều dài là 11 ký số.
    Mong bạn giúp mình vì mình rành về Access nên cứ bị sếp mắn hoài vì… ngu quá!
    Thành thật cảm ơn bạn

Leave a Reply

Your email address will not be published. Required fields are marked *