You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart中实现含空格、最多两个连续字符的正则校验?

在Dart中实现指定规则的字符串校验

你的需求需要同时满足两个校验规则,下面直接给出可行的实现方案:

校验规则拆解

  1. 最多允许两个连续相同字符,禁止三个及以上连续重复(比如aaabc因三个连续a被拒绝)
  2. 禁止出现重复的相同子字符串(根据示例,指空格分隔的单词不能重复,比如aabc aabc因重复单词被拒绝)

Dart实现代码

bool validateString(String input) {
  // 规则1:禁止三个及以上连续相同字符
  final consecutiveRegex = RegExp(r'(.)\1{2,}');
  if (consecutiveRegex.hasMatch(input)) {
    return false;
  }

  // 规则2:禁止空格分隔的重复单词
  final duplicateWordRegex = RegExp(r'\b(\w+)\b.*\b\1\b');
  if (duplicateWordRegex.hasMatch(input)) {
    return false;
  }

  // 可选:确保字符串只包含字母和空格
  final allowedCharsRegex = RegExp(r'^[A-Za-z\s]+$');
  return allowedCharsRegex.hasMatch(input);
}

// 测试示例
void main() {
  print(validateString('aabc')); // true(允许)
  print(validateString('aaabc')); // false(三个连续a)
  print(validateString('aabc aabc')); // false(重复单词)
  print(validateString('aabcde')); // true(允许)
  print(validateString('abs cdd ert fgg fgy df')); // true(允许)
}

正则说明

  • (.)\1{2,}:匹配任意字符连续出现3次及以上,\1引用第一个捕获组的字符,{2,}表示至少重复2次(加上原字符就是3次)
  • \b(\w+)\b.*\b\1\b:匹配空格分隔的重复单词,\b是单词边界,(\w+)捕获一个单词,.*匹配任意中间内容,\1引用之前捕获的单词,确保完全重复
  • ^[A-Za-z\s]+$:可选校验,确保字符串只包含大小写字母和空格,避免混入其他字符

额外说明

如果你的"重复子字符串"指的不是空格分隔的单词,而是任意长度的连续重复子串(比如abab这种),可以把规则2的正则换成(..+)\1,该正则会匹配长度≥2的连续重复子串,替换后即可满足这类校验需求。

内容的提问来源于stack exchange,提问作者paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:50:29