0

我需要使用以下 3 个约束来制作QLineEdita QRegularExpressionValidator

  1. 不能从空白开始^[\\S]
  2. 不能以 Hello 开头^(?!Hello).+
  3. 不能以空白结尾^.*[\\S]$

如何将这 3 个组合到一个正则表达式中以便我可以将其设置为QRegularExpressionValidator

谢谢!

注意:只要我有一个可以用正则表达式工具验证的正则表达式,我就很好。我指定Qt只是为了提供更多上下文。

4

2 回答 2

1

你可以使用

^(?!Hello\b)\S(?:.*\S)?$

解释

  • ^字符串的开始
  • (?!Hello\b)负前瞻,断言直接在右边的不是你好
  • \S匹配非空白字符
  • (?:.*\S)?可选匹配除换行符和非空白字符外的任何字符 0+ 次
  • $字符串结束

正则表达式演示

于 2020-07-25T09:33:42.377 回答
1

这应该这样做:

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);
});

控制台输出:

"a" ==> true
"this is ok" ==> true
" leading space" ==> false
"trailing space " ==> false
"Hello text" ==> false
"Hello" ==> false

正则表达式的解释:

  • ^...$-- 在开始和结束处锚定
  • ([^\s]|...)-- 逻辑,其中第一部分是单个非空格字符
  • (?!(...)).+-- 负前瞻
  • (Hello|\s)-- 'Hello' 或空格的 ...
  • .+[^\s]-- 后跟任意数量的字符,末尾的空格除外
于 2020-07-25T00:30:41.380 回答