使用preg_match检查字母数字点划线和下划线的正则表达式是什么?

时间:2014-08-08 05:37:47

标签: php regex preg-match

我正在检查用户输入的用户名

我正在尝试使用preg_match()验证PHP中的用户名,但我似乎无法按照我想要的方式运行它。我需要preg_match()来:

  • 只接受字母,数字和。 - _

即。字母数字点划线和下划线,我试过htaccess的正则表达式是这样的

([A-Za-z0-9.-_]+)

就像这样,但它似乎不起作用,它为简单的alpha用户名提供了错误。

$text = 'username';

if (preg_match('/^[A-Za-z0-9.-_]$/' , $text)) {
   echo 'true';   
} else {
   echo 'false';
}

我怎样才能让它发挥作用?

我将在这样的功能中使用它

//check if username is valid
function isValidUsername($str) {
    return preg_match('/[^A-Za-z0-9.-_]/', $str);
}

我在preg_match() and username尝试回答,但正则表达式仍有问题。


更新

我在这个函数中使用 xdazz 给出的代码。

//check if username is valid
function isValidUsername($str) {
    if (preg_match('/^[A-Za-z0-9._-]+$/' , $str)) {
       return true;   
    } else {
       return false;
    }
}

并将其检查为

$text = 'username._-546_546AAA';


if (isValidUsername($text) === true) {
echo 'good';
}
else{
echo 'bad';
}

4 个答案:

答案 0 :(得分:2)

您错过了++为一个或多个,*为零或更多),或者您的正则表达式仅匹配带有一个字符的字符串。

if (preg_match('/^[A-Za-z0-9._-]+$/' , $text)) {
   echo 'true';   
} else {
   echo 'false';
}

答案 1 :(得分:2)

连字符-[...]内具有用于范围的特殊含义。

它应该在开头或者最后一个或者像([A-Za-z0-9._-]+)一样转义它,否则它将匹配ASCII字符集中._之间的所有字符。< / p>

阅读类似的帖子Including a hyphen in a regex character bracket?

更好地使用与\w匹配的[A-Za-z0-9_]。在较短的格式中使用[\w.-]+


你的上一个正则表达式是什么意思?

此处[^..]用于否定字符集。如果您在^[...]之外使用它,那么它代表行/字符串的开头。

[^A-Za-z0-9.-_]          any character except: 
                         'A' to 'Z', 
                         'a' to 'z', 
                         '0' to '9',
                         '.' to '_'

答案 2 :(得分:1)

只需将-放在字符类的最后一个,并在char类之后添加+以匹配一个或多个字符。

$text = 'username';

if (preg_match('/^[A-Za-z0-9._-]+$/' , $text)) {
   echo 'true';   
} else {
   echo 'false';
}

答案 3 :(得分:1)

功能应该是这样的

function isValidUsername($str) {
    return preg_match("/^[A-Za-z0-9._-]+$/", $str);
}