我正在检查用户输入的用户名
我正在尝试使用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';
}
答案 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);
}