我怎样才能使用正则表达式禁止重复的字符

时间:2011-12-24 18:56:13

标签: c# regex

如何使用正则表达式禁止重复的字符?

这个正则表达式不应该允许

1--234567890
1--2345--1212

但是以下是有效的

1-2-3-4-5-6-7-8-9-0
1234567890

这里唯一的问题是减号不能互相输入,所以--不应该匹配

字符串中有多少短划线没有限制。 我正在使用C#

先谢谢

4 个答案:

答案 0 :(得分:4)

这将匹配任何一对相同的字符:

"(.)\1"

或者,对于单词字符:

"(\w)\1"

因此,如果正则表达式匹配,则您希望验证失败。


更新

现在您澄清了只有--才是您需要匹配的内容,这是另一种选择:

"--"

当然,在这种情况下,您只需对字符串使用Contains("--")

答案 1 :(得分:2)

使用否定前瞻:^((.)(?!\2))+$将匹配没有重复字符的字符串。

或者 - 可能更快:搜索(.)\1,它将匹配一对重复的字符。

答案 2 :(得分:1)

如果短划线是你唯一关心的角色:

// this regular expression is "inexact", three dashes always has two dashes, etc
var bad = new Regex("--");
if (bad.IsMatch(input))
{
    throw new ArgumentException("Not a valid format", "input");
}

或者更简单:

// regular expression? no need
if (input.Contains("--"))
{
    throw new ArgumentException("Not a valid format", "input");
}

答案 3 :(得分:0)

此任务不适合正则表达式。您可能想要做的是编写一个循环来遍历字符串并搜索重复项。最有效的方法是使用一些基于散列的数据结构,如字典。