2010-05-17 156 views
1

我正在与我的正则表达式摔跤。 我想只允许字母和数字,并在用户名点,2〜20个字符长 我想到了这样的事情c#正则表达式问题:只允许字母,数字和点(2到20个字符)允许

[0-9A-ZA-Z] {2,20}

但随后21个字符也行,这不是我想要什么

+2

我认为你需要更明确一点。我怀疑你想要一个由所有点组成的用户名。我认为它会更像'username'或'user.name',但'user.','.user'和'......'不是。 – tvanfosson 2010-05-17 14:54:43

+1

我注意到有几千封信件被排除在外。那是故意的吗? – 2010-05-17 15:15:31

+0

@tvanfosson好吧,它是管理功能,所以也会有一些用户的想法,但你是对的,我的算法不会限制这个 – Michel 2010-05-17 19:07:27

回答

9

我建议你做两个检查 - 一个长度和一个基于内容的事实上,你可能只需要名称中的一个点,而不是任何数量的点。我会假设像usernameuser.name这样的名称是唯一允许的格式。

这应该得到的内容(但允许下划线以及):

^\w+(\.\w+)?$ 

如果你不想下划线,那么你就代替\w+使用[0-9a-zA-Z]+。为了解释,它将匹配任何由一个或多个单词字符组成的字符串,后跟正好是0或1的点后跟一个或多个单词字符。它还必须匹配字符串的开头和结尾,即字符串中不允许其他字符。

然后你只需要通过一个简单的长度检查来获得长度。

+0

非常好!是的,这个点有点困难。 .........可能是坏的,但jpvan.der.bilt可能是正确的 – Michel 2010-05-17 19:09:19

+1

@Michel - 那么你可以将'(\。\ w +)?'改成'(\。\ w +)* '接受零个或多个而不是零个或一个。 – tvanfosson 2010-05-17 19:31:13

+0

工作!谢谢。 – Michel 2010-05-18 09:56:06

6
^[0-9a-zA-Z\.]{2,20}$ 
+2

我怀疑'........... .........'不允许。 – tvanfosson 2010-05-17 14:49:41

+0

啊,开始和结束,谢谢 – Michel 2010-05-17 19:09:51

6

尝试^[\w\.]{2,20}$来代替。

2

您需要使用的开始和结束字符串(^$),并且逃脱.

^[0-9a-zA-Z\.]{2,20}$ 
相关问题