php正则表达式验证

Ell*_*ott 13 php regex

只是一个快速的问题,abit rubish with regex所以我想发布在这里.下面的正则表达式是验证用户名.

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

  • 从至少2个字母开始

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

到目前为止我有这个,但是没有用

<?php

$username=$_POST['username'];

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

?>
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

ken*_*ytm 25

你可以使用正则表达式

/^(?=[a-z]{2})(?=.{4,26})(?=[^.]*\.?[^.]*$)(?=[^_]*_?[^_]*$)[\w.]+$/iD
Run Code Online (Sandbox Code Playgroud)

如在

<?php

$username=$_POST['username'];

if (!preg_match('/^(?=[a-z]{2})(?=.{4,26})(?=[^.]*\.?[^.]*$)(?=[^_]*_?[^_]*$)[\w.]+$/iD',
                $username))
{
 return false;
}
else
{
 echo "username ok";
}

?>
Run Code Online (Sandbox Code Playgroud)
  • ^(?=[a-z]{2})确保字符串"开始与至少2个字母".
  • (?=.{4,26})确保"必须是4-26个字符之间".
  • (?=[^.]*\.?[^.]*$)确保以下字符最多包含一个.才结束.
  • 同样(?=[^_]*_?[^_]*$)确保最多一个_.
  • [\w.]+$承诺的比赛.它还确保只有字母数字,_并将.参与其中.

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

  • 不要忘记添加`/ D`修饰符.这很重要,因为`$`将允许字符串中的最后一个换行符,例如``eviluser \n"`. (2认同)

Jim*_* W. 5

你在一个正则表达式中要求很多,这可能是可能的,但这不是最好的方法,你想让用户知道他们的用户名错误的原因.

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;
} 
Run Code Online (Sandbox Code Playgroud)

然后检查你会做:

$validUsername = checkUsername($username);

if ($validusername !== true) {
     echo "An error occured: " . $validUsername;
}
Run Code Online (Sandbox Code Playgroud)

这样,用户就知道存在错误并且可以更容易地修复它,而不是对错误是什么一无所知.你也应该停止使用ereg它已经折旧使用preg_match而不是.

注意使用!==来检查,这也检查类型,因为它可以返回一个字符串(通过松散的比较返回true).只是一个FYI.