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

本文关键字:字符 禁止 何使用 正则表达式 | 更新日期: 2023-09-27 18:18:49

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

这个正则表达式不允许

1--234567890
1--2345--1212

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

这里唯一的问题是减号不能在彼此后面输入,所以--不应该匹配

字符串中有多少破折号没有限制。我用c#

Thanks in Advance

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

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

"(.)'1"

对于单词字符:

"('w)'1"

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


更新:

现在您已经明确了只有--是您需要匹配的,这里是另一个选项:

"--"

当然,在这种情况下,您可以简单地对字符串使用Contains("--")

使用反向向前看:^((.)(?!'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");
}

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