我正在尝试为ASP.Net Regular Expression Validator控件设置验证表达式。它用于验证用户名的创建,所以我想限制字符数,我也想阻止它们使用空格。这是我到目前为止所得到的:
^.*(?=.{5,20})(?=.*\w{5,255}).*$
\w{5,255}
部分会阻止空格和特殊字符(显然除了下划线)。我不知道“5,255”如何使它发挥作用,但确实如此;我只是从其他地方复制了它。
我遇到的主要问题是,如果第一个或最后一个字符是空格(或特殊字符),它会通过验证,这是不可接受的。谁能帮我?我确信它很简单,但我对正则表达式几乎一无所知。
答案 0 :(得分:3)
您可以使用更简单的内容:
^[a-zA-Z0-9_]{5,255}$
这将允许长度为5-255个字符的字母数字用户名。
答案 1 :(得分:2)
(让我们全面了解如何至少使用正则表达式!)
发布的正则表达式无法正常工作的主要原因是因为您尝试使用前瞻。 Lookahead是一个0长度模式,只保证字符串的下一部分将匹配某个模式(并且通常用于利用它为0长度,因此它不会扩展您的捕获组)。
实际上,你的正则表达式(脱离原来的/^.(?=.{5,20})(?=.\w{5,255}).*$/
)意味着:
^.
“我们行的开头应匹配任何单个字符(前提是它不是换行符,虽然这取决于正则表达式实现以及可能传入或未传入的标志)”
(?=
“并保证在此之后”
.{5,20})
是5-20个字符。“
(?=
“此外,在相同的第一个字符之后(因此,请记住,前瞻是0长度),保证”
.
“一个任意字符”
\w{5,255})
“和5-255个字符。”
.*$
当然,由于所有这些详尽的匹配都是0长度,我们希望该行的其余部分是任意数量的字符。“
您在技术上可以采用的做法是^(?=\w{5,255}).{5,255}$
,但这只是过于复杂。我建议只使用\w{5,255}
或类似的东西。