Results 1 to 20 of 27

Thread: Ip Address Validation

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #21
    Join Date
    Apr 2010
    Posts
    4
    Qt products
    Qt4
    Platforms
    MacOS X Unix/X11 Windows

    Default Re: Ip Address Validation

    I realize this wins me necro-poster of the year, but I felt that this information would be beneficial to a lot of people.

    The IP Address Validation (by Regex) and Mask issue was a tough cookie to crack. Setting one without the other usually worked but was flawed. I'd either not get the visual effect of having dots in the box or the user could enter invalid addresses (octets with values >255). Setting them together made it impossible to enter any value.

    I found that the Class provided by Wysota solved the problem, but there was another limitation: it required you to use blanks as 0's, when I would prefer to use spaces.

    Side-Note: I know a lot of people are looking for a good IP Address RegEx and here's the best one I've found so far:
    Qt Code:
    1. \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
    To copy to clipboard, switch view to plain text mode 

    What I ended up doing was expanding the code that Wysota provided to allow for spaces. Here is the excerpt:
    Qt Code:
    1. if (slist[i].isEmpty() || slist[i] == " ") {
    2. emptyGroup = true;
    3. continue;
    4. }
    To copy to clipboard, switch view to plain text mode 

    Now that fully works with a Mask of "000.000.000.000; " and your users cannot physically enter an invalid address.

    Yay! That is settled. Now for my next problem. My specific programming needs also include being able to enter in a CIDR, which has a Mask of "009.009.009.009\/09". The first part of that works just like IP Addresses and the last part is limited to integers of 0-32.

    To accomplish this, I duplicated Wysota's IP Address class to CIDRValidator. Here is the full code (tested and works):

    Qt Code:
    1. class CIDRValidator : public QValidator {
    2. public:
    3. CIDRValidator(QObject *parent=0) : QValidator(parent) { }
    4. void fixup(QString &/*input*/) const { }
    5. State validate(QString &input, int &/*pos*/) const {
    6. if(input.isEmpty()) { return Acceptable; }
    7. QStringList slist = input.split(".");
    8. int s = slist.size();
    9. if (s > 4) { return Invalid; }
    10. bool emptyGroup = false;
    11. for (int i=0; i<s; i++) {
    12. bool ok, ok2 = true;
    13. QStringList ssplit = slist[i].split('/');
    14. if (slist[i].isEmpty()
    15. || slist[i] == " "
    16. || ssplit.count() > 1 && (ssplit[0] == " " || ssplit[1] == " "))
    17. {
    18. emptyGroup = true;
    19. continue;
    20. }
    21. int val = (ssplit.count() > 1 ? ssplit[0].toInt(&ok) : slist[i].toInt(&ok));
    22. int cidval = (ssplit.count() > 1 ? ssplit[1].toInt(&ok2) : -1);
    23. if((!ok || val<0 || val>255) || (ssplit.count() > 1 && (!ok2 || cidval<0 || cidval>32))) { return Invalid; }
    24. }
    25. if(s<4 || emptyGroup) return Intermediate;
    26. return Acceptable;
    27. }
    28. };
    To copy to clipboard, switch view to plain text mode 

    I hope this information helps future searchers with setting up their own IP Address and CIDR Address boxes.
    Last edited by Jothay; 17th September 2010 at 00:14.

Similar Threads

  1. how to read pc's network IP address
    By wei243 in forum Qt Programming
    Replies: 12
    Last Post: 8th January 2010, 16:59
  2. MULTICAST with QT 4.1 and above.
    By jlarsj in forum Qt Programming
    Replies: 7
    Last Post: 10th January 2007, 12:45
  3. How to determine ip address of remote host?
    By nopalot in forum Qt Programming
    Replies: 1
    Last Post: 30th April 2006, 21:18
  4. Problem with mask and validation
    By gunhelstr in forum Qt Programming
    Replies: 1
    Last Post: 19th April 2006, 08:07
  5. Qt 4.1.1 linker warnings
    By Matt Smith in forum Installation and Deployment
    Replies: 0
    Last Post: 26th February 2006, 22:14

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.