Regex-如何防止重复的特殊字符?

Regex-How to prevent repeated special characters?

我没有使用正则表达式的经验。我需要一个不允许重复特殊字符(+-*/& 等)的正则表达式 该字符串可以包含数字、字母数字和特殊字符。

这应该是有效的:abc,df

这应该是无效的:abc-,df

如果你能帮助我,我将不胜感激!感谢提前。

[\,\+\-\*\/\&]{2,} 如果需要,请在方括号中添加更多字符。
演示 https://regex101.com/r/CBrldL/2

使用以下正则表达式匹配无效字符串。

[^A-Za-z0-9]{2,}

目前提供的两个解决方案匹配 不允许 的字符串。

但标题是 如何防止...,所以我假设正则表达式 应该匹配 allowed 字符串。这意味着正则表达式应该:

  • 匹配整个字符串如果不包含2 连续的特殊字符,
  • 否则不匹配。

您可以将以下部分放在一起来实现:

  • ^ - 字符串锚点的开始,
  • (?!.*[...]{2}) - 负面前瞻 连续 2 个特殊 字符(此处标记为...),在任何地方,
  • 匹配整个 (non-empty) 字符串的正则表达式,
  • $ - 字符串锚结束。

所以整个正则表达式应该是:

^(?!.*[!@#$%^&*()\-_+={}[\]|\;:'",<.>\/?]{2}).+$

请注意,在字符 class 中(在 [] 之间)一个反斜杠 转义以下字符应放在 - 之前(如果在 序列的中间),右方括号, 反斜杠本身和 /(正则表达式终止符)。

或者如果你想将正则表达式应用到单个单词(不是整个 字符串),则正则表达式应为:

\b(?!\S*[!@#$%^&*()\-_+={}[\]|\;:'",<.>\/?]{2})\S+