帮助驱动程序许可证号验证正则表达式

Nor*_*rth 4 c# regex

我正在尝试验证我正在制作的表单的驾驶执照.我试图使用一个正则表达式.

  1. 最大长度为9个字符
  2. 仅限字母数字字符
  3. 必须至少有4个数字字符
  4. 必须不超过2个字母字符
  5. 第三个和第四个字符必须是数字

我是正则表达式的新手我正在谷歌搜索试图解决它.对此的帮助将不胜感激.

Mar*_*ell 5

它必须是一个正则表达式吗?通过将它们分开来保持简单:

static bool IsValid(string input)
{
    return Regex.IsMatch(input, @"^[A-Za-z0-9]{4,9}$") // length and alphanumeric
        && Regex.IsMatch(input, "^..[0-9]{2}") // 3rd+4th are numeric
        && Regex.IsMatch(input, "(.*[0-9]){4}") // at least 4 numeric
        && !Regex.IsMatch(input, "(.*[A-Za-z]){3}"); // no more than 2 alpha
}
Run Code Online (Sandbox Code Playgroud)


Joe*_*oey 3

尝试仅使用一个正则表达式来解决这个问题可能有点困难,因为您需要跟踪多个事物。我建议您尝试单独验证每个属性(除非这样做有意义)。

例如,您可以通过检查包含所有字母数字字符的字符类和指示它最多应出现 9 次的量词来轻松验证第一个和第二个属性:

^[0-9a-zA-Z]{4,9}$
Run Code Online (Sandbox Code Playgroud)

锚并确保这实际上匹配整个字符串,而不仅仅是其中的一部分 正如 Marc Gravell 指出的那样,字符串将与表达式匹配,因为它也可以部分匹配。^$"aaaaa""a{3}"

检查第五个属性可以类似地完成,尽管这次我们不关心其余的:

^..[0-9]{2}
Run Code Online (Sandbox Code Playgroud)

这里的^字符是字符串开头的锚点,点 ( .)是任意字符的占位符,我们使用字符类和重复量词检查第三个和第四个字符是否再次为数字。

通过迭代字符串并在进行过程中保留计数器,属性三和属性四可能是最容易验证的。

编辑: Marc Gravell对于这两种使用正则表达式的情况也有一个非常好的解决方案。没想到那些

如果您绝对需要在一个正则表达式中执行此操作,那么这将是一项工作(并且可能既不更快也不更具可读性)。基本上我会从枚举所有可能的选项开始,例如字符串可能的样子。我a在这里用作字母字符的占位符和1数字的占位符。

我们至少需要四个字符 (3),第三个和第四个始终固定为数字。对于四个字符的字符串,这让我们只有一个选择:

1111
Run Code Online (Sandbox Code Playgroud)

不过,五个字符的字符串可能会引入一个字母,但位置不同:

a1111
1a111
1111a
Run Code Online (Sandbox Code Playgroud)

和以前一样,全数字变体:

11111
Run Code Online (Sandbox Code Playgroud)

像这样继续下去,您可能可以为每种情况创建特殊规则(基本上我会将其分为“无字母”,“一个字母”和“两个字母”,并枚举不同的模式。然后您可以将所有模式串在一起与管道 ( |)字符一起用作正则表达式中的替代字符。