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

时间:2014-05-08 11:06:50

标签: c# asp.net regex asp.net-mvc-4

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

例如:John,Smith,Anderson,Emma

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

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

2 个答案:

答案 0 :(得分:7)

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

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

前瞻(?!...)将使整个正则表达式失败,如果里面的内容匹配。

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

请参阅demo here

答案 1 :(得分:3)

以下是您要找的内容:

^               (?# Starting of name)
 (?=[A-Z])      (?# Ensure it starts with capital A-Z without consuming the text)
 (?i:([a-z])    (?# Following letters ignoring case)  
    (?!\1{2,})  (?# Letter cant be followed by previous letter more than twice)
 ){3,30}        (?# Allow condition to be repeated 3 to 30 times)
$  

视觉表示如下所示:

Regular expression visualization