01/10/2018, 17:19

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 ...

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:


0