只是一个快速的问题,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
是有效的用户名.)
你在一个正则表达式中要求很多,这可能是可能的,但这不是最好的方法,你想让用户知道他们的用户名错误的原因.
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.
归档时间: |
|
查看次数: |
35161 次 |
最近记录: |