Computer >> Máy Tính >  >> Lập trình >> C ++

Xác thực địa chỉ IPv4 bằng cách sử dụng các mẫu ReGex trong C ++

Với một Địa chỉ IP, nhiệm vụ là xác thực địa chỉ IP này và kiểm tra xem nó có phải là IPv4 hay không với sự trợ giúp của ReGex (Biểu thức chính quy). Nếu Địa chỉ IP hợp lệ thì in “Địa chỉ IPv4” nếu không thì in “Không phải”.

Địa chỉ IPv4 hợp lệ là một IP có dạng "X1.X2.X3.X4" trong đó 0 <=Xi <=255 và Xi không được chứa các số 0 ở đầu. Ví dụ:"192.168.1.1" và "192.168.1.0" là địa chỉ IPv4 hợp lệ nhưng "192.168.01.1", trong khi "192.168.1.00" và "192.168@1.1" là địa chỉ IPv4 không hợp lệ. Ví dụ,

Đầu vào-1 -

IP= “172.15.254.2”

Đầu ra -

“IPv4”

Giải thích - Đây là địa chỉ IPv4 hợp lệ, hãy trả về “IPv4”.

Đầu vào-2 -

IP= “312.25.12.1”

Đầu ra -

“Not”

Giải thích - Đây không phải là Địa chỉ IPv4 hợp lệ, hãy trả về "Không".

Phương pháp tiếp cận để giải quyết vấn đề này

Để kiểm tra xem địa chỉ IP đã cho có phải là IPv4 hay không, chúng tôi sử dụng ReGex. ReGex là một biểu thức chứa một chuỗi các ký tự xác định một mẫu cụ thể. Các mẫu này có thể được sử dụng trong các thuật toán để khớp với mẫu trong một chuỗi. Nó cũng được sử dụng rộng rãi để xác thực đầu vào.

Đặc điểm kỹ thuật phạm vi - Chúng ta có thể chỉ định các ký tự để tạo các mẫu một cách đơn giản nhất. Để chỉ định phạm vi bằng cách sử dụng các ký tự, chúng ta có thể sử dụng dấu ngoặc nhọn ‘[]’.

Chỉ định ký tự - Biểu thức trên chỉ ra một dấu ngoặc mở và một chữ số trong phạm vi từ a đến z, ‘A’ đến ‘Z’ và ‘0’ đến ‘9’ là một regex. [a-z], [A-Z] và [0-9].

Mẫu lặp lại - Công cụ sửa đổi biểu thức có thể là “+” đề xuất so khớp sự xuất hiện của một mẫu một hoặc nhiều lần hoặc nó có thể là “*” đề xuất so khớp sự xuất hiện của một mẫu không hoặc nhiều lần.

Biểu thức [a-z] * sẽ khớp với một chuỗi trống.

Nếu bạn muốn chỉ định một nhóm ký tự để khớp một hoặc nhiều lần, thì bạn có thể sử dụng dấu ngoặc đơn như sau -

[Abc]+

Sau đây là cách tiếp cận để giải quyết vấn đề này,

  • Lấy Đầu vào một chuỗi chỉ định địa chỉ IP.

  • Một hàm chuỗi validIPAddress (chuỗi IP) lấy một địa chỉ IP làm đầu vào và kiểm tra xem chuỗi đầu vào có hợp lệ hay không. Nếu nó hợp lệ thì trả về “IPv4”, nếu không thì trả về “Không phải địa chỉ IP”.

  • Tạo mẫu regex cho địa chỉ IPv4. Vì địa chỉ IPv4 chứa 4 trường trong đó mỗi trường chứa giá trị trong khoảng 0-255. Địa chỉ IPv4 trông giống như XXX.XXX.XXX.XXX.

  • Địa chỉ IPv4 hợp lệ có thể nằm trong dải (([0-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9] ] | 25 [0- 5]) \\.) {3} trong đó chữ số đầu tiên sẽ nằm trong khoảng 0-9, chữ số thứ hai 1-9 và chữ số thứ ba trong khoảng 0-9.

  • Tương tự, đối với ký tự đầu tiên của trường thứ hai sẽ nằm trong phạm vi 100-199, do đó, mẫu regex sẽ là ‘1 [0-9] -0-9]’

  • Đối với trường tiếp theo, chữ số sẽ nằm trong khoảng 200-249. Do đó, mẫu regex sẽ là ‘2 [0-4] [0-9]’ đảm bảo rằng phạm vi không vượt quá một chữ số lớn hơn 255.

  • Cuối cùng là trường tiếp theo chứa các chữ số trong phạm vi từ 250-255, do đó mẫu regex sẽ là 25 [0-5].

Ví dụ

#include<bits/stdc++.h>
using namespace std;
string validIPAddress(string IP) {
   regex ipv4("(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0- 9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])");
   if(regex_match(IP, ipv4))
      return "IPv4";
   else
      return "Not";
}
int main(){
   string IP= “172.16.254.1”;
   string ans= validIPAddress(IP);
   cout<<ans<<endl;
   return 0;
}

Đầu ra

Chạy đoạn mã trên sẽ tạo ra kết quả là,

IPv4

Vì Địa chỉ IP đầu vào là địa chỉ IP Hợp lệ, chúng tôi sẽ trả về “IPv4”.