2010-06-14 32 views
5

Tôi đang tạo một tập lệnh, trong đó người dùng cần nhập địa chỉ IP hợp lệ. Làm cách nào để kiểm tra xem đó có phải là địa chỉ IP hợp lệ không? (Không cần phải giải quyết)Kiểm tra xem biến POST [] có phải là địa chỉ IP không?

Về cơ bản $_POST['ip'] chỉ cần được giữa 0.0.0.0255.255.255.255

+0

Tôi không nghĩ rằng bạn muốn xác thực 0.0.0.0 dưới dạng IP hợp lệ ... – animuson

+0

@animuson: Đó là địa chỉ tuyến đường hoàn toàn hợp lệ. –

Trả lời

9

Nếu bạn đang chạy PHP> = 5.2, sử dụng phần mở rộng Lọc: info

filter_var($ip, FILTER_VALIDATE_IP) 

More herehere.

+0

Xin lỗi, không thấy điều này cho đến sau khi tôi đăng bài của tôi. –

+1

Chà, điều đó cực kỳ tiện lợi. Cảm ơn! – Rob

0
  1. Tách bạn "IP" chuỗi bằng ""
  2. Xác minh rằng có bốn mục nhập (octet) trong mảng.
  3. Verify: 0 < = octet < = 255
  4. Nếu bạn muốn nhận được fancier, bạn có thể kiểm tra xem địa chỉ IP không phải là trong một mạng riêng, không phải là một mạng multicast, hoặc không nằm trong Ltd. không gian.

Chỉnh sửa: Sử dụng phương pháp PHP cài sẵn nếu có! :)

+0

Ý bạn là gì về 4? – Rob

+0

Tôi nghĩ rằng bạn có nghĩa là: 0 ≤ octet ≤ 255. – Gumbo

1

Bạn cũng có thể thử preg_match(/^(?:(?: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]?)$/, $_POST['ip']).

Thông tin thêm về preg_match()here

Cũng có rất nhiều mẫu để xác nhận. Chọn một trong những phù hợp nhất cho bạn.


Cập nhật: Đồng thời sử dụng bộ lọc. Không phải tất cả các máy chủ đã có PHP bằng hoặc cao hơn, so với 5.2.0. Vì vậy, u có thể kiểm tra phiên bản trước khi sử dụng chúng, nhưng IMHO cách hợp lý nhất sẽ là Bộ lọc hoặc PCRE.

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