2012-01-10 57 views
0

我想验证用户的用户名。我希望它能够有字母和数字,不超过30个字符。寻找一个特定的过滤器PHP

是否有内置的PHP过滤器,能够为我做到这一点?这些手动正则表达式的东西伤害了我的大脑...

+0

http://stackoverflow.com/questions/1330693/validate-username-as-alphanumeric-with-underscores – NoName13 2012-01-10 01:25:08

+0

不幸的是,正则表达式是您描述的工作的最佳工具...像http://www.regexbuddy.com /是了解它们的好工具!我将用'/^[a-z0-9] {1,30} $/i'作为最好的正则表达式! – cmbuckley 2012-01-10 01:26:02

+0

LOL ...所有的答案都是完全一样的想法! – 2012-01-10 01:27:30

回答

2

没有内置过滤器。

你可能要考虑learning regular expressions,它们不是不好。

$valid = (strlen($username) <= 30 && preg_match("#^[a-z0-9A-Z]+$#", $username)); 
+1

考虑使用正则表达式中的量词而不是使用'strlen()'。 – FtDRbwLXw6 2012-01-10 02:09:02

0

这有一些具体的事情没有过滤器,但这个工程并有一个简单的正则表达式:

function isValidUsername($username) { 
    return (strlen($username) <= 30) && (preg_match("/^[a-z0-9]+$/i", $username) == 1); 
} 
0

这里是应该这样做的功能。我建议花一些时间学习正则表达式的工作方式。它们是程序员工具箱中最强大(也是最有用)的工具之一。

更新:运用注释分隔符的建议之上,并略微简化我的功能:

更新2:添加了/ d模式修改,以确保$防止对\ n匹配。

function isValidUsername($name) 
{ 
    return preg_match("/^[a-zA-Z0-9]{1,30}$/D", $name); 
} 
0

PHP没有内置任何内容来满足这些要求。下面是你需要的正则表达式,但:

$valid = (bool)preg_match('/^[a-zA-Z0-9]{1,30}$/', $username); 

我知道你没有要求设计批评,但请你想一想,如果硬盘的用户名是真正的必需品。如果没有,请考虑使用电子邮件地址,因为它们更方便用户,而且无论如何您都可能会向用户询问该信息。

+0

所以我会说... if($ _POST ['username'] == $ valid){echo“the username is valid”..。 ..。 。然后它会变成$用户名? – Depetrify 2012-01-10 01:50:29

+0

@Depetrify:不,如果你想检查的用户名是在$ _POST ['username']'中,你可以在上面的代码中使用它而不是'$ username'。那么'$ valid'可以是'TRUE'或'FALSE',你可以从那里开始。 – FtDRbwLXw6 2012-01-10 02:06:30