如何在Dart中实现含空格、最多两个连续字符的正则校验?
在Dart中实现指定规则的字符串校验
你的需求需要同时满足两个校验规则,下面直接给出可行的实现方案:
校验规则拆解
- 最多允许两个连续相同字符,禁止三个及以上连续重复(比如
aaabc因三个连续a被拒绝) - 禁止出现重复的相同子字符串(根据示例,指空格分隔的单词不能重复,比如
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
相关产品推荐
相关产品推荐

