正则表达式匹配firstname.lastname或只是具有长度限制的firstname

时间:2011-08-04 15:56:12

标签: .net regex

我需要在.net中使用正则表达式,它将用户名作为firstname或firstname.lastname匹配,最大长度为50个字符。 firstname的情况很简单但是使用firstname.lastname我无法弄清楚如何在lastname中只允许50减去len(firstname。)。

^([a-zA-Z]{1,50})|([a-zA-Z]+[.][a-zA-Z]+)$

将匹配firstname案例,但firstname.lastname的第二个案例将允许firstname和lastname中的无限字符。

4 个答案:

答案 0 :(得分:2)

轻松完成。这是一个带有注释的正则表达式的C#片段:

if (Regex.IsMatch(userNameString, 
    @"# Match username with max length of 50 chars
    ^            # Anchor to start of string.
    (?!.{51})    # Assert length is 50 or less.
    [A-Za-z]+    # First name.
    (?:          # Optional second name.
      \.         # Required dot separator.
      [A-Za-z]+  # Last name.
    )?           # Last name is optional.
    $            # Anchor to end of string.
    ", 
    RegexOptions.IgnorePatternWhitespace)) {
    // Valid username
} else {
    // Invalid username
} 

答案 1 :(得分:1)

这样做。

^(?:([a-zA-Z]{1,50})|(?=.{1,51}$)[a-zA-Z]+[.][a-zA-Z]+)$

基本上,我添加了一个环视说匹配(不捕获)1-51个字符然后是行尾。我使用了51,因为我假设.应计入长度计算。

答案 2 :(得分:1)

^(?i)(?=(?:[a-z]\.?){1,50}$)[a-z]+(?:\.[a-z]+)?$

只有在[a-z] s的数量介于1到50之间时才会匹配。

如果总长度不能超过50,则可以使用此代码:

^(?i)(?=.{1,50}$)[a-z]+(?:\.[a-z]+)?$

答案 3 :(得分:0)

使用两步验证会更容易,我没有理由避免它。