Reputation: 3153
I need to make a QLineEdit
with a QRegularExpressionValidator
with the following 3 constraints:
^[\\S]
^(?!Hello).+
^.*[\\S]$
How do I combine those 3 in one regex so that I can set it a QRegularExpressionValidator
?
Thank you!
Note: As long as I have a regex that is verifiable with a regex tool I am good. I have specified Qt
just to provide more context.
Upvotes: 0
Views: 413
Reputation: 7616
This should do it:
var strings = [
'a',
'this is ok',
' leading space',
'trailing space ',
'Hello text',
'Hello'
];
var re = /^([^\s]|(?!(Hello|\s)).*[^\s])$/;
strings.forEach((str) => {
var val = re.test(str);
console.log('"' + str + '" ==> ' + val);
});
Console output:
"a" ==> true
"this is ok" ==> true
" leading space" ==> false
"trailing space " ==> false
"Hello text" ==> false
"Hello" ==> false
Explanation of the regex:
^...$
-- anchor at the beginning and end([^\s]|...)
-- logical or, where the first part is a single non space char(?!(...)).+
-- negative lookahead(Hello|\s)
-- ... of 'Hello' or space.+[^\s]
-- followed by any number of chars, except space at the endUpvotes: 1
Reputation: 163457
You could use
^(?!Hello\b)\S(?:.*\S)?$
Explanation
^
Start of string(?!Hello\b)
Negative lookahead, assert what is directly to thte right is not Hello\S
Match a non whitespace char(?:.*\S)?
Optionally match 0+ times any char except a newline and a non whitespace char$
End of stringUpvotes: 1