我的用户插入了像
________________________
************************
------------------------
????????????????????????
Run Code Online (Sandbox Code Playgroud)
格式化文档(不要问我关于我的用户!).显示片段时看起来很糟糕.如何删除任何字符的重复?我可以添加单独的过滤器,但它将是一个恒定的猫捉老鼠游戏.
正则表达式可以过滤这些吗?
Sim*_*han 12
尝试类似的东西:
(.)\1{5,}
Run Code Online (Sandbox Code Playgroud)
哪个匹配任何字符,然后匹配该字符的5个或更多.如果你的语言使用正则表达式模式的字符串,请记住逃避\!
您可以使用简单的正则表达式删除任何字符的重复 (.)\1+
然而,这将赶上合法用途为好,如在他们的拼写(增加了一倍字母的单词气球,拼写,以及等).
因此,您可能希望将表达式限制为某些不允许的字符,尽管保持尽可能通用,以便不必随时修改它,因为您的用户会找到要使用的新字符.
一种可能的解决方案是禁止重复的非字母和非数字字符:
([^A-Za-z0-9])\1+
但即使这不是所有情况的最终解决方案,因为您的一些用户实际上可能决定使用实际的字母序列作为分隔符:
ZZZZZZZZZZZZZZZZZZZZZZ
BBBBBBBBBBBBBBBBBBBBBB
ZZZZZZZZZZZZZZZZZZZZZZ
Run Code Online (Sandbox Code Playgroud)
为了不允许这种情况,并允许合法使用某些重复的非字母字符(例如在省略号中......),您可以使用正则表达式将字符重复限制为最大值3使用如下语法(<pattern>)\1{min, max}:(.)\1{4,}匹配违规字符序列,最小长度为4,未指定最大值.