2013-04-21 71 views
-1

我想验证用户名登录 - 它只能接受字母,数字和undescore,最多20个标志,这里是我的正则表达式:双预浸匹配登录验证

正则表达式:^[\w_]{4,20}$ working example at Rubular

它应该接受此登录:

login 
login_login 
_login 
_87login 
837420 
login898 

但是,当登录由只是在强调它应该返回false:

________ 

如何在一个preg中做到这一点?那是我的问题:)

+4

猜测哉!你能告诉我们一个有效用户名的标准吗? (另外,'[\ w_]'和'\ w'意思相同] – Ryan 2013-04-21 22:18:00

+0

允许有多少个下划线?再加上if(preg_match('/ \ w {4,20} /',$ user)&&!preg_match('/ _ {2,} /',$ user)){'? – HamZa 2013-04-21 23:29:09

+1

在您编写正则表达式之前,您必须能够用英语描述您要实施的规则。 – 2013-04-22 03:16:24

回答

0

如果你只是想检查是否有至少一个字母/数字,使用lookahead

^(?=.*?[a-zA-Z0-9])\w{4,20}$ 
+0

只要字符串中也包含字母,似乎仍然允许连续多个下划线。 – Arjan 2013-04-21 22:46:46

+0

引用我的回答:“*如果您只想检查是否至少有一个字母/数字*”。当然,它允许连续多次下划线,但由于规格不明确,我在这里看不到问题。 – Loamhoof 2013-04-22 07:40:05

0

/^(_?[a-z0-9-])+$/i

此接受由字母,数字,连字符和下划线的字符串,但不允许__。另外请注意,这不检查长度,你将不得不使用strlen()。它也不允许尾随下划线,但是你的规格没有说明这是有效的。