正则表达式拒绝重复字符的输入

Ran*_*ser 3 c# regex asp.net asp.net-mvc-4

我想要一个正则表达式,允许用户输入以下值.最少四个,最多30个字符和第一个字符应为大写.

例如:约翰,史密斯,安德森,艾玛

我不希望用户输入以下类型的值

Jooohnnnnnn,Smmmmith,Aaaanderson,Emmmmmmmmma

任何人都可以为我提供正则表达式吗?我搜索了一段时间但找不到有效的RegEx.

我需要它为我的ASP.net MVC应用程序模型验证.

谢谢

编辑:我不知道如何检查重复的字符,我只是尝试了以下

@"^[A-Z]{1}[a-zA-Z ]{2,29}$"

我想添加的规则是

  1. First character Upper case
  2. 4-30 characters
  3. No repeats of characters. Not greater than 2
Run Code Online (Sandbox Code Playgroud)

Rob*_*bin 7

要对您的正则表达式进行检查,您可以使用负向预测:

^(?!.*(.)\1{2})[A-Z][a-zA-Z ]{3,29}$
Run Code Online (Sandbox Code Playgroud)

前瞻(?!...)如果里面有什么它匹配将失败整个正则表达式.

为了寻找重复的模式,我们使用了一个捕获组:(.)\1{2}.我们捕获第一个字符,然后检查它是否后跟(至少)两个相同的字符和反向引用\1.

在这里演示.