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

Xác thực địa chỉ IPv6 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à IPv6 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ỉ IPv6” nếu không thì in “Không phải”.

Địa chỉ IPv4 hợp lệ là IP có dạng "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX" trong đó mỗi chữ số Xi là một chữ số thập lục phân. Ví dụ:

Đầu vào-1 -

IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”

Đầu ra -

“Not”

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

Đầu vào-2 -

IP= “2001:0db8:85a3:0000:0000:8a2e:0370:7334”

Đầu ra -

“IPv6”

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

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à IPv6 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’ dưới dạng regex.

[a-z], [A-Z] and [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 đị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ề “IPv6” nếu không thì trả về “Không phải địa chỉ IP”.

  • Tạo mẫu regex cho địa chỉ IPv6. Vì địa chỉ IPv6 chứa 8 trường trong đó mỗi trường chứa các chữ số giá trị được biểu thị dưới dạng hệ thập lục phân. Địa chỉ IPv6 trông giống như XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX được phân tách bằng dấu "hai chấm".

  • Địa chỉ IPv6 hợp lệ có thể nằm trong dải ([0-9a-fA-F]) {1,4}) \\:) {7} ([0-9a-fA-F]) {1,4}) trong đó chữ số đầu tiên sẽ nằm trong khoảng từ 0-9, chữ số thứ hai là chữ số thập lục phân.

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

Ví dụ

#include<bits/stdc++.h>
using namespace std;
string validIPAddress(string IP) {
   regex ipv6("((([0-9a-fA-F]){1,4})\\:){7}([0-9a-fA-F]){1,4}");
   if(regex_match(IP, ipv6))
      return "IPv6";
   else
      return "Not";
}
int main(){
   string IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”;
   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à,

Not

Vì Địa chỉ IP đầu vào không phải là địa chỉ IP hợp lệ, chúng tôi sẽ trả về "Không phải".