我需要在.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中的无限字符。
答案 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)
使用两步验证会更容易,我没有理由避免它。