2014-04-20 20 views
0

我正在为我正在做的网站制作一个登录系统。 我只有有限的经验使用正则表达式,由于某种原因,它不工作。 有问题的代码是:PHP正则表达式只检查输入中的第一个字符

if (!(preg_match("/[A-Za-z0-9_ ]+/",$username)&&(strlen($username)>=4) && 
strlen($username)<=25)) 
{ 
     return 4; 
} 

长度检查工作正常,但性格检查没有。 它应该检查确保比$username只包含字母,数字_和空格。 它似乎只检查第一个字符,之后,什么都行!

如果有人可以帮忙,将不胜感激,谢谢!

+2

在你的正则表达式'^ ..正则表达式中使用锚'$' –

+0

http://www.php.net/manual/en/book.filter.php – hakre

回答

3

尝试使用 “第一线” ^$修饰符

例如 “行结束”:

preg_match("/^[A-Za-z0-9_ ]+$/",$username) 
+0

辉煌,谢谢! :D – darkdan21

1

您正在寻找的正则表达式如下:

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

正则表达式

^    # the beginning of the string 
[a-z0-9_ ]+ # any character of: 'a' to 'z', '0' to '9', '_', ' ' (1 or more times) 
$    # before an optional \n, and the end of the string 
+0

也许不是因为这是PHP,你想保留任何语言环境。 – hakre

+0

'\ w'可能不是一个好主意。从[文档](http://php.net/manual/en/regexp.reference.escape.php):“*”单词“字符是任何字母或数字或下划线字符,即任何字符可以是Perl“word”的一部分,字母和数字的定义由PCRE的字符表控制,如果发生locale特定的匹配,它可能会有所不同。例如,在“fr”(法语)语言环境中,某些字符大于128的代码用于重音字母,这些符号由'\ w'。*“匹配。 –

+0

好点,固定。 – hwnd

相关问题