php 正则表达式验证

2022-08-30 20:49:12

只是一个快速的问题,是正则表达式的垃圾,所以我想我会在这里发布。下面的正则表达式用于验证用户名。

  • 长度必须介于 4-26 个字符之间

  • 以至少 2 个字母开头

  • 只能包含数字、一个下划线和一个点

到目前为止,我有这个,但不起作用

<?php

$username=$_POST['username'];

if (!eregi("^([a-zA-Z][0-9_.]){4,26}$",$username))
{
 return false;
}
else
{
 echo "username ok";
}

?>

谢谢:)


答案 1

您可以使用正则表达式

/^(?=[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";
}

?>
  • 确保字符串“以至少 2 个字母开头”。^(?=[a-z]{2})
  • 确保它“长度必须在4-26个字符之间”。(?=.{4,26})
  • 确保以下字符在结束之前最多包含一个字符。(?=[^.]*\.?[^.]*$).
  • 同样,最多确保一个 .(?=[^_]*_?[^_]*$)_
  • 提交匹配项。它还确保只有字母数字,并将参与其中。[\w.]+$_.

(注意:此正则表达式假定是有效的用户名。hello_world


答案 2

您在一个正则表达式中要求很多,这可能是可能的,但这不是最好的方法,您想让用户知道为什么他们的用户名出错。

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)。只是一个FYI。


推荐