2011-07-14 40 views
5

Tôi đang thực hiện một ứng dụng sử dụng địa chỉ IP. Tôi có để xác nhận họ bắt đầu từ ít nhất 1.0.0.1 nhưng với các mã dưới nó chấp nhận 0.0.0.0:Cách xác thực địa chỉ IP trong C#

\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 

Tôi cũng đã cố gắng thay đổi nó để:

\b(25[0-5]|2[0-4][0-9]|[01]?[1-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 

Mã này không chấp nhận 0.0.0.0 nhưng cũng không chấp nhận 100.0.0.0 đến 109.0.0.0.

Ai đó có thể trợ giúp?

+0

Hãy học cách để định dạng câu hỏi của bạn đúng cách. –

+0

-1 vì không giải thích rằng bạn đang sử dụng regex (nếu đó là nó là gì). "Bt" là gì? Tại sao định dạng lại quá nghèo? Đọc: http://stackoverflow.com/editing-help – spender

+0

Sử dụng Regex cho loại xác thực này dường như không cần phải đánh thuế não. Tại sao không chia nhỏ bằng '.' và xác thực từng phần của địa chỉ IP theo cách thông thường hơn? – spender

Trả lời

1

Tự khắc phục nỗi đau! Chuyển đổi thành chuỗi, chia nhỏ ký tự dấu chấm và kiểm tra xem mỗi phân đoạn trong số 4 phân đoạn nằm trong khoảng 0 hoặc 1 đến 255.

Nếu không, nếu bạn sử dụng RegexBuddy (một ứng dụng tuyệt vời cho RegEx), nó có một nhóm ví dụ địa chỉ IP trong thư viện inc cho 0.0.0.0 đến 255.255.255.255:

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

sử dụng

IPAddress addr = IPAddress.TryParse(str); 

Sau đó, nếu mà làm việc có được những con số sử dụng

addr.GetAddressBytes(); 

và sau đó kiểm tra giá trị byte cho các điều kiện chính xác bằng cách sử dụng các trường hợp thông thường.

+2

bye cách nó cũng xác nhận 1 là true và đặt ipaddress thành 0.0.0.1 –

+0

Có "1" là địa chỉ IP hợp lệ, có nghĩa là 0.0.0.1 –

+2

Yap cho chuyên gia mạng có thể dễ hiểu, nhưng xác thực trên hộp văn bản đầu vào một ứng dụng cho người dùng không chuyên nghiệp là không mong muốn. –

0

Hãy thử sử dụng này,

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; 
Các vấn đề liên quan