2011-10-28 48 views
10

Làm cách nào để sử dụng MaskedTextBox để ngăn người dùng nhập địa chỉ IP không hợp lệ? (Tôi muốn nó hoạt động giống như Windows).Địa chỉ IP trong MaskedTextBox?

+0

Tại sao không chỉ đọc giá trị trong và tiết kiệm cho người dùng một số rắc rối? Không bao giờ làm cho người dùng làm những gì bạn có thể làm cho họ. – Woot4Moo

Trả lời

14

Hãy thử điều này:

IPAddress ipAddress; 
if (IPAddress.TryParse(maskedTextBoxY.Text, out ipAddress)) 
{ 
    //valid ip 
} 
else 
{ 
    //is not valid ip 
} 

lưu ý: để sử dụng nó , bạn cần nhập không gian tên System.Net:

using System.Net; 
4

Tốt hơn nên sử dụng REGEX để xác thực tính năng nhập của người dùng. Dưới đây là một ví dụ:

  string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"; 

     string ip1 = "192.168.0.1"; 
     string ip2 = "302.0.0.1"; 

     Regex.IsMatch(ip1, pattern); // returns true 
     Regex.IsMatch(ip2, pattern); // returns false 
+7

và bây giờ bạn có hai vấn đề ... – Woot4Moo

+0

Um, kể từ khi nào? Điều này không trả lời được câu hỏi nào cả. -1 – Ryan

+1

@minitech - Tôi tin Woot4Moo đang đề cập đến cái cưa cũ về các regex - xem http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html –

1

Đặt mặt nạ để: ###.###.###.###

Sẽ hiển thị như thế này:

enter image description here

+0

và IPv6 là gì? – Woot4Moo

+0

@ Woot4Moo Tôi không nghĩ rằng có thể được thực hiện với một mặt nạ duy nhất. Bạn sẽ cần phải nghe để nhấn phím và xử lý các ký tự được/không được phép – Icarus

+0

đúng, MaskedTextBox không cho phép bạn thực hiện xác thực phức tạp trực tiếp. Bạn có thể sử dụng sự kiện KeyPress để đọc đầu vào của người dùng và xác định trong đó là hợp lệ. Và biểu thức Regex phù hợp sẽ giúp thực hiện tác vụ này. – Dan

13

đơn giản hơn nhiều so với câu trả lời khác:

Sử dụng System.Net.IPAddress và System.Windows.Forms.MaskedTextBox

thiết lập các thuộc tính sau của MaskedTextBox:

MaskedTextBox.Mask = ###.###.###.### 
MaskedTextBox.ValidatingType = typeof(System.Net.IPAddress); 

bất cứ khi nào hộp văn bản xác thực, sự kiện MaskedTextBox.TypeValidationCompleted được nâng lên. Đối số sự kiện hiển thị như sau:

  • Văn bản được nhập có thể chấp nhận làm địa chỉ IP không? (= Không System.Net.IPAddress.TryParse trở ok)
  • Mô tả các lỗi như là một chuỗi
  • Giá trị phân tích cú pháp (= một đối tượng của System.NET.IpAddress
  • Các loại giá trị phân tích cú pháp. Needed nếu bạn có nhiều MaskedTextBoxes với mặt nạ khác nhau

Sau khi nhận được sự kiện này, bạn có thể quyết định có nên sử dụng giá trị hoặc thông báo cho người dùng những gì là sai với giá trị.

+1

KHÔNG hoạt động. Chỉ hoạt động cho 123.123.123.123 - tức là TẤT CẢ các ký tự hiện diện. Địa chỉ IP của "123.4.5.6" sẽ xuất hiện dưới dạng "123.456 .." –

+0

Đăng ký sự kiện KeyDown và phản hồi cách bạn muốn làm đầu vào nếu nhà điều hành nhấn một dấu chấm/dấu chấm phẩy/dấu phẩy/mũi tên phải/tab, v.v. –

0

không có giải pháp phức tạp cho câu hỏi này Tôi nghĩ rằng @HaraldDutch câu trả lời là gần nhất, nhưng nó là không thích từ đầu vào với ký tự khoảng trắng. Sử dụng hướng dẫn bổ sung:

IPAdressBox.ResetOnSpace = false; 

vấn đề được giải quyết chung, nhưng phức tạp hơn là triển khai phương pháp phân tích cú pháp tùy chỉnh kiểu dữ liệu riêng.

  public class IPValidator 
      { 
       public static IPValidator Parse(string input) 
       { 
        Regex regexpr = new Regex(@" "); 
        Match match = regexpr.Match(input); 
        if (match.Success) 
         return new IPValidator(); 
        else throw new ArgumentException(input); 
       } 
      } 

Trường hợp regexpr là cách cụ thể để xác thực IP. Sau đó, nó có thể được sử dụng như ValidatingType:

IPAdressBox.ValidatingType = typeof(IPValidator); 
0

Tôi đã tạo hộp văn bản mặt nạ IP bắt chước hộp văn bản Windows.

Có cùng chiều rộng, chiều cao, ngăn người dùng nhập> 255 giá trị, hộp nhảy, v.v ... v.v ... Nếu bạn vẫn cần nó và muốn thử nó ra nó ở đây:

https://github.com/RuvenSalamon/IP-MaskedTextBox

(Tôi không biết nếu điều này được tính như thúc đẩy tự nhưng nó mã nguồn mở vì vậy tôi nghĩ đó là ok.)

Các vấn đề liên quan