下面的正则表达式用于验证用户名。
长度必须在 4-26 个字符之间
至少以 2 个字母开头
只能包含数字和一 下划线和一个点
到目前为止我已经有了这个,但不起作用。
$username = $_POST['username'];
if (!eregi("^([a-zA-Z][0-9_.]){4,26}$",$username)) {
return false;
} else {
echo "username ok";
}
您可以使用正则表达式
/^(?=[a-z]{2})(?=.{4,26})(?=[^.]*\.?[^.]*$)(?=[^_]*_?[^_]*$)[\w.]+$/iD
如
<?php
$username=$_POST['username'];
if (!preg_match('/^(?=[a-z]{2})(?=.{4,26})(?=[^.]*\.?[^.]*$)(?=[^_]*_?[^_]*$)[\w.]+$/iD',
$username))
{
return false;
}
else
{
echo "username ok";
}
?>
^(?=[a-z]{2})
确保字符串“以至少 2 个字母开头”。(?=.{4,26})
确保“长度必须在 4-26 个字符之间”。(?=[^.]*\.?[^.]*$)
确保后面的字符最多包含一个.
直到结束。(?=[^_]*_?[^_]*$)
确保最多有一个_
。[\w.]+$
提交比赛。它还确保仅涉及字母数字、_
和 .
。(注意:此正则表达式假定
hello_world
是有效的用户名。)
您在一个正则表达式中要求很多,这可能是可能的,但这不是最好的方法,您想让用户知道为什么他们的用户名出错。
function checkUsername($username) {
$username = trim($username);
if (empty($username)) {
return "username was left blank.";
}elseif (strlen($username) < 4) {
return "username was too short";
}elseif (strlen($username) > 26) {
return "username was too long";
}elseif (!preg_match('~^[a-z]{2}~i', $username)) {
return "username must start with two letters";
}elseif (preg_match('~[^a-z0-9_.]+~i', $username)) {
return "username contains invalid characters.";
}elseif (substr_count($username, ".") > 1) {
return "username may only contain one or less periods.";
}elseif (substr_count($username, "_") > 1) {
return "username may only contain one or less underscores.";
}
return true;
}
然后检查你会做什么:
$validUsername = checkUsername($username);
if ($validusername !== true) {
echo "An error occured: " . $validUsername;
}
这样用户就知道存在错误,并且可以更轻松地修复它,而不是对错误是什么视而不见。另外,您应该停止使用 ereg,它已被贬值,请改用 preg_match。
注意 使用 !== 进行检查,这也会检查类型,因为它可以返回一个字符串(通过松散比较将返回 true)。仅供参考。
你说的部分:
还有一个下划线和一个点
说实话,会让我远离正则表达式!
我会做类似的事情:
if(!eregi('^[a-zA-Z]{2}$', substr(0,2))) {
// .... check for only 2 dots here later ....
}