Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Not getting what I expected using a regex in QRegExpValidator.



  • I am using a QLineEdit with a QRegExpValidator in order to limit inputs to this type:

    a.green or d.yellow4 and so on.

    So basically one lowercase character followed by a period and then an arbitrary number of characters and possibly a number at the end.

    What I have are the following

    QRegExp textValidator("^[a-z]+\.?[a-z]+[0-9]*$"); 
    QRegExpValidator *validator = new QRegExpValidator(textValidator, 0);
    

    and

    QRegExp textValidator("[a-z]\.\w++"); 
    QRegExpValidator *validator = new QRegExpValidator(textValidator, 0);
    

    With the first one allowing pretty much anything and the second one pretty much nothing (I'm a man of the extremes what can I say).

    Can someone help me fix my validator?



  • Well, the first problem I see here is the escaping. The backslash is being consumed by the C++ compiler and doesn't get to the regex parser. You need to double escape it, to compensate this issue. Like this:

    "^[a-z]+\\.?[a-z]+[0-9]*$"
    

    You said the string can only have one lowercase character, so you need to remove the first +. If both the period and the following characters are optional, they should be grouped.

    "^[a-z](\\.[a-z]+)?[0-9]*$"


  • @Leonardo said:

    "^a-z?[0-9]*$"

    Thanks for the quick reply. I can confirm it is working as intended.


  • Lifetime Qt Champion

    Hi,

    You can check the regularexpression example (available starting 5.5). It's a little application that helps test and build regexp to use with QRegularExpression



  • 5.5 you say. Interesting :)


  • Lifetime Qt Champion

    I do :)

    However, you don't need to build Qt 5.5 to build it, you can use your current Qt version