刚才搞错了,找了半天这次应该没问题了,就是我现在在用一个PHP程序,但是这个程序禁止用户使用中文名注册ID,只能用英文或者数字,我找了半天发现应该是下面这个代码造成的function validusername($username)
{
if ($username == "")
return false; // The following characters are allowed in user names
$allowedchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for ($i = 0; $i < strlen($username); ++$i)
if (strpos($allowedchars, $username[$i]) === false)
return false; return true;
}看着应该是因为里面限制的这句
$allowedchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
使得程序无法使用中文名注册吧,但是我不知该怎么改,希望懂PHP的大大们帮看下如何修改下让这个程序能够使得会员注册中文名呢?
谢谢啊

解决方案 »

  1.   

    function validusername($username){
       return preg_match("/^[\x80-\xff_a-zA-Z0-9]+$",$username); 
    }
      

  2.   


    function validusername($account) {
    $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
    $len = strlen($username);
    if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) {
    return FALSE;
    } else {
    return TRUE;
    }
    }
      

  3.   


    其实你整个方法直接用上面的正则匹配验证就可以了
    ^表示匹配开始符
    \x80-\xff表示匹配中文
    _表示匹配下划线
    a-zA-Z表示匹配所用英文字母
    0-9表示匹配数字
    +表示表达式至少出现1次
    $终止符
      

  4.   


    呃~谢谢说明,但是我对PHP一点都不太清楚,想知道应该把我原文里的哪些替换成这个呢?
    难道是把原来所有的这些代码
    function validusername($username)
    {
    if ($username == "")
    return false;// The following characters are allowed in user names
    $allowedchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";for ($i = 0; $i < strlen($username); ++$i)
    if (strpos($allowedchars, $username[$i]) === false)
    return false;return true;
    }全部更换成
    function validusername($username){
    return preg_match("/^[\x80-\xff_a-zA-Z0-9]+$",$username);
    }
    这么点就可以了吗?
      

  5.   


    function validusername($username)
    {
    if ($username == ""){
      return false;
    }else{
      return true;
      }
    }全部替换成这样,除不允许空外,其余全部允许。
      

  6.   


    呃~担心这样会不会允许的太多了?搞出什么特殊字符BUG啥了~
      

  7.   

    我的是discuz // uc_server 的,他们都不担心你更不用担心啦