ASP.Net正则表达式验证器没有空格

时间:2011-07-21 16:07:04

标签: asp.net regex validation

我正在尝试为ASP.Net Regular Expression Validator控件设置验证表达式。它用于验证用户名的创建,所以我想限制字符数,我也想阻止它们使用空格。这是我到目前为止所得到的:

^.*(?=.{5,20})(?=.*\w{5,255}).*$

\w{5,255}部分会阻止空格和特殊字符(显然除了下划线)。我不知道“5,255”如何使它发挥作用,但确实如此;我只是从其他地方复制了它。

我遇到的主要问题是,如果第一个或最后一个字符是空格(或特殊字符),它会通过验证,这是不可接受的。谁能帮我?我确信它很简单,但我对正则表达式几乎一无所知。

2 个答案:

答案 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}或类似的东西。