Usted está solicitando una gran cantidad en una expresión regular, esto puede ser posible, pero no es la mejor manera, desea que el usuario sepa por qué su nombre de usuario es error de salida.
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;
}
A continuación, para comprobar que haría:
$validUsername = checkUsername($username);
if ($validusername !== true) {
echo "An error occured: " . $validUsername;
}
De esta manera el usuario sabe que hubo un error y puede corregir más fácil en lugar de ser ciego a lo que es el error. También debe dejar de usar ereg que se ha depreciado use preg_match en su lugar.
NOTA el uso de! == para comprobar, esto también comprueba el tipo ya que puede devolver una cadena (que devolvería verdadero con una comparación suelta). Solo un FYI.
'preg_match' es la manera preferida para llevar a cabo la expresión regular coincide. 'eregi' quedó en desuso a partir de PHP 5.3 y su uso es" muy desaconsejable ": http://php.net/eregi – rojoca
No, no, gracias por el enlace – Elliott
Por favor, dé algunos ejemplos de nombres de usuario válidos y no válidos. Sus reglas son contradictorias (al menos 2 letras frente a solo números). – kennytm