Regex-如何防止重复的特殊字符?
Posted
技术标签:
【中文标题】Regex-如何防止重复的特殊字符?【英文标题】:Regex-How to prevent repeated special characters? 【发布时间】:2017-12-10 22:22:27 【问题描述】:我没有使用正则表达式的经验。我需要一个不允许重复特殊字符(+-*/& 等)的正则表达式 字符串可以包含数字、字母数字和特殊字符。
这应该是有效的:abc,df
这应该是无效的:abc-,df
如果您能帮助我,我将不胜感激!感谢您的提前。
【问题讨论】:
您认为还有什么特殊字符?-
和 ,
对我来说同样“特别”
【参考方案1】:
目前提出的两种解决方案都匹配不允许允许的字符串。
但倾斜是如何防止......,所以我假设正则表达式 应该匹配 allowed 字符串。这意味着正则表达式应该:
匹配整个字符串,如果它不包含2 连续的特殊字符, 否则不匹配。您可以将以下部分放在一起来实现:
^
- 字符串锚的开始,
(?!.*[...]2)
- 连续 2 次特殊的负前瞻
字符(此处标记为...
),在任何地方,
匹配整个(非空)字符串的正则表达式,
$
- 字符串锚点结束。
所以整个正则表达式应该是:
^(?!.*[!@#$%^&*()\-_+=[\]|\\;:'",<.>\/?]2).+$
请注意,在 char 类中([
和 ]
之间)有一个反斜杠
转义以下字符应放在-
之前(如果在
序列的中间),右方括号,
反斜杠本身和/
(正则表达式终止符)。
或者如果您想将正则表达式应用于单个单词(而不是整个 字符串),那么正则表达式应该是:
\b(?!\S*[!@#$%^&*()\-_+=[\]|\\;:'",<.>\/?]2)\S+
【讨论】:
效果很好,你拯救了我的一天。非常感谢,谢谢!【参考方案2】:[\,\+\-\*\/\&]2,
如果需要,可以在方括号中添加更多字符。
演示https://regex101.com/r/CBrldL/2
【讨论】:
漂亮而简单的一个。谢谢【参考方案3】:使用以下正则表达式匹配无效字符串。
[^A-Za-z0-9]2,
【讨论】:
以上是关于Regex-如何防止重复的特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章