【问题标题】:Regex-How to prevent repeated special characters?Regex-如何防止重复的特殊字符?
【发布时间】:2017-12-10 22:22:27
【问题描述】:

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

这应该是有效的:abc,df

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

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

【问题讨论】:

  • 您认为还有什么特殊字符? -, 对我来说同样“特别”

标签: java c# regex pcre regular-language


【解决方案1】:

目前提出的两种解决方案都匹配不允许允许的字符串。

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

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

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

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

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

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

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

或者如果您想将正则表达式应用于单个单词(而不是整个 字符串),那么正则表达式应该是:

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

【讨论】:

  • 效果很好,你拯救了我的一天。非常感谢,谢谢!
【解决方案2】:

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

【讨论】:

  • 漂亮而简单的一个。谢谢
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2017-11-22
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多