2012-12-29 26 views
0

所以即时通讯继续我的PHP旅程。现在创建注册表单并验证用户请求的用户名。这是我到目前为止:根据各种标准验证用户名preg_match

if (preg_match("([a-z 0-9](?=.{3})(?!.{10}))", $user_Name)) 

我用“RegExr”来创建这个匹配,但它似乎并没有工作。增加了一个大写字母,它仍然说,这是有效的

正想为:从0

  • 号 - 9
  • 没有大写字母在6所有
  • 分钟
  • 没有特殊符号字符
  • 最多10个字符
+1

和10个字符是可怕的。这种长度限制有没有真正的原因? – Daniil

+0

我选择使用10长度最大值,因为我想创建更清洁更专业的用户名...你建议我改变这个吗? –

+1

很多用户使用他们的第一个姓氏作为用户名(就像我一样),而对于像我这样的人来说,这是非常棒的。什么是'专业'关于限制用户名为10个符号? – Daniil

回答

9

Accordin克你的规则,这应该工作:

if (preg_match('/^[a-z0-9]{6,10}$/', $user_name)) 
+0

感谢尼克这帮了我很多 –

+0

没问题,你可以标记它是正确的答案,如果它帮助。 –

-1

经过大约3个小时的研究和故障排除我找到了正确的解决方案。原来,顺序是非常重要的:(?= {5})

< ===字符串必须是5个或更多

< ===字符串必须是({11}?!)。不超过10个字符

^[AZ 0-9] + $ < ===匹配以唯一的共同的字母和数字强制用户具有6之间的用户名长度的任何字符串从0 -9

if (!preg_match('/(?=.{5})(?!.{11})^[a-z 0 -9]+$/', $user_Name)) { 
      echo 'username is not valid</br>'; 
      echo $user_Name; 
     } 
     else { 
      echo 'username is valid</br>'; 
      echo $user_Name; 
     } 
+2

我已经回答了你的问题。你现在所做的只是错误的。 '(?=。{5})'表示您之前可以有5个任意字符,因此#####是有效的用户名。并且'[a-z 0 -9]'应该是'[a-z0-9]',否则允许空格。我甚至认为这将意味着a-z,空格,连字符和9. –

+1

@NicholasRuunu是对的,使用他的模式。你的模式是不正确的,如果你公开测试它,你会发现这一点。 – vascowhite

+0

我现在正在测试它,并出于一些奇怪的原因:/ ...感叹我很困惑 –